파일명에서 연월일을 평일로 변환

파일명에서 연월일을 평일로 변환

다음 파일 이름 구조를 사용하여 적절한 요일로 이름을 바꿔야 합니다.

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/장치 등이 아님...) 및 숨겨진 디렉터리( Ddotfile/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 -dGNU 방식입니다 .datestrftime -r

zmv파일 이름 바꾸기를 시작하기 전에 충돌을 확인 하지만 이것은 그렇지 않습니다. 따라서 우리는 -i최소한 파일 손상을 피할 수 있는 기회를 제공하기 위해 위의 내용을 추가합니다. GNU에는 나중에 무엇을 할지 보여주도록 지시하는 옵션이 mv있는데 , 이는 나중에 문제가 발생한 경우 명령을 되돌리는 데 유용할 수 있습니다.-v

관련 정보