@John1024 に感謝!
最終更新日に従って、異なる拡張子を持つファイルの名前を同時に変更する必要がありました :
for f in *; do
fn=$(basename "$f")
mv "$fn" "$(date -r "$f" +"%Y-%m-%d_%H-%M-%S")_$fn"
done
「DSC_0189.JPG」➜「2016-02-21_18-22-15_DSC_0189.JPG」
「MOV_0131.avi」➜「2016-01-01_20-30-31_MOV_0131.avi」
元のファイル名を保持したくない場合:
mv "$fn" "$(date -r "$pathAndFileName" +"%Y-%m-%d_%H-%M-%S")"
私のような初心者に役立つことを願っています!
ファイル システムの日付に基づく命名
Linux シェルの場合:
for f in *.jpg
do
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
done
説明 :
-
for f in *.jpg doこれにより、すべての jpeg ファイルのループが開始されます。この機能の特徴は、名前にスペース、タブ、またはその他の難しい文字が含まれているものであっても、すべてのファイル名で機能することです。
-
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"これにより、ファイルの名前が変更されます。
-rを使用しますdateを伝えるオプション 現在の日付ではなく、ファイルの日付を表示します。仕様+"%Y%m%d_%H%M%S"dateに伝えます 指定したとおりにフォーマットします。ファイル名、
$f、使用される場所はどこでも二重引用符で囲みます。これにより、奇数のファイル名がエラーを引き起こさないことが保証されます。-nmvへのオプション move に既存のファイルを上書きしないように指示します。 -
doneこれでループは完了です。
対話的に使用するために、コマンドをすべて 1 行にまとめたほうがよい場合があります。その場合は、次を使用します:
for f in *.jpg; do mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"; done
EXIF 作成日に基づく命名
(ファイル システムの日付ではなく) EXIF 作成日に基づいてファイルに名前を付けるには、exiftool が必要です。 または同等のもの:
for f in *.jpg
do
mv -n "$f" "$(exiftool -d "%Y%m%d_%H%M%S" -CreateDate "$f" | awk '{print $4".jpg"}')"
done
説明 :
上記はファイル日付のコマンドと非常に似ていますが、 exiftool を使用しています と awk EXIF画像の作成日を抽出します。
-
exiftoolコマンドは次のような形式で日付を提供します:$ exiftool -d "%Y%m%d_%H%M%S" -CreateDate sample.jpg Create Date : 20121027_181338必要な実際の日付は、出力の 4 番目のフィールドです。
-
exiftoolを渡しますawkに出力 必要なフィールドを抽出できるように:awk '{print $4".jpg"}'これにより、日付フィールドが選択され、さらに
.jpgが追加されます
これを試してください
for file in `ls -1 *.jpg`; do name=`stat -c %y $file | awk -F"." '{ print $1 }' | sed -e "s/\-//g" -e "s/\://g" -e "s/[ ]/_/g"`.jpg; mv $file $name; done
もっと簡単な方法があるかもしれませんが。