
다음 파일 이름 구조를 사용하여 적절한 요일로 이름을 바꿔야 합니다.
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진수와 일치합니다.- 그 두 번째는 , in 및 의 디렉토리( , 재귀)에
(...)
캡처됩니다 .$2
(.mp4)
$3
(**/)
$1
(#qD.)
선택만 하는 glob 한정자입니다.정기적인파일(.
: 디렉터리, 심볼릭 링크, fifos/장치 등이 아님...) 및 숨겨진 디렉터리(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,,}
bash
소문자로 변환하는 연산자 입니다 . 위와 같이 날짜를 구문 분석하는 date -d
GNU 방식입니다 .date
strftime -r
zmv
파일 이름 바꾸기를 시작하기 전에 충돌을 확인 하지만 이것은 그렇지 않습니다. 따라서 우리는 -i
최소한 파일 손상을 피할 수 있는 기회를 제공하기 위해 위의 내용을 추가합니다. GNU에는 나중에 무엇을 할지 보여주도록 지시하는 옵션이 mv
있는데 , 이는 나중에 문제가 발생한 경우 명령을 되돌리는 데 유용할 수 있습니다.-v