ファイル名の年、月、日を勤務日に変換

ファイル名の年、月、日を勤務日に変換

次のファイル名構造を使用して、適切な曜日に名前を変更する必要があります。

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,,}beingbash演算子は小文字に変換されます。日付を解析するGNU方式ですdate -d(上記と同じ)。datestrftime -r

zmvファイル名の変更を開始する前に競合を確認しますが、今回はそうではありません。したがって、上記を追加すると、ファイルの-i破損を最小限に抑える機会が得られます。 GNUには、今後の作業を表示するように指示するオプションがmvあります。これは、問題が発生した場合に後でコマンドを再起動するのに役立ちます。-v

おすすめ記事