파일명의 연, 월, 일을 근무일로 변환

파일명의 연, 월, 일을 근무일로 변환

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

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...)도 숨겨진 디렉터리( 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,,}being bash연산자는 소문자로 변환됩니다. 날짜를 구문 분석하는 GNU 방식입니다 date -d(위와 같음).datestrftime -r

zmv파일 이름 바꾸기를 시작하기 전에 충돌을 확인 하지만 이번은 그렇지 않습니다. 따라서 위의 사항을 추가하면 -i최소한 파일 손상을 방지할 수 있는 기회가 제공됩니다. GNU에는 앞으로 수행할 작업을 표시하도록 지시하는 옵션이 mv있는데 , 이는 문제가 발생한 경우 나중에 명령을 다시 시작하는 데 유용할 수 있습니다.-v

관련 정보