다음 파일 이름 구조를 사용하여 적절한 요일로 이름을 바꿔야 합니다.
GMT20161003-randomtext.mp4
결국은 될 것이다monday.mp4
다양한 하위 디렉터리에 이런 파일이 많아서 재귀적으로 실행할 수 있으면 더 좋을 것 같은데...
답변1
그리고 zsh
:
zmodload zsh/datetime
autoload zmv
zmv -n '(**/)GMT(<->)*(.mp4)(#qD.)' '$1${(L)$(
strftime %A "$(strftime -r %Y%m%d $2)")}$3'
-n
실제로 이름을 바꾸 려면 삭제하세요 .
<->
임의의 10진수와 일치합니다.- 그 초는 , 및 의 디렉터리( , 재귀적으로)
(...)
에 캡처됩니다 .$2
(.mp4)
$3
(**/)
$1
(#qD.)
선택일 뿐이다정기적인파일(.
: 디렉터리도 아니고, 심볼릭 링크도 아니고, fifos/device...)도 숨겨진 디렉터리(D
dotfile/dotdir의 경우)를 통과합니다.${(L)...}
: 확장자를 소문자로 변환합니다.strftime -r %Y%m%d
:reverse-strftime (strptime) 날짜를 에포크 시간으로 변환합니다.strftime %A ...
: 에포크 시간의 형식 시간인 %A는 전체 근무일을 나타냅니다. 로케일에 따라 다릅니다. (프랑스어 로케일에서는 프랑스어 근무일이 적용됩니다).
GNU 시스템에서는 GNU 셸( bash
)을 사용하여 다음을 수행할 수 있습니다.
find . -name 'GMT*-*.mp4' -type f -exec bash -c '
for file do
base=${file##*/}
date=${base#GMT}
date=${date%%-*}
wday=$(date -d "$date" +%A)
echo mv -i "$file" "${file%/*}/${wday,,}.mp4"
done' bash {} +
( echo
작업을 수행하려면 제거하세요).
${var,,}
being bash
연산자는 소문자로 변환됩니다. 날짜를 구문 분석하는 GNU 방식입니다 date -d
(위와 같음).date
strftime -r
zmv
파일 이름 바꾸기를 시작하기 전에 충돌을 확인 하지만 이번은 그렇지 않습니다. 따라서 위의 사항을 추가하면 -i
최소한 파일 손상을 방지할 수 있는 기회가 제공됩니다. GNU에는 앞으로 수행할 작업을 표시하도록 지시하는 옵션이 mv
있는데 , 이는 문제가 발생한 경우 나중에 명령을 다시 시작하는 데 유용할 수 있습니다.-v