みなさんおはようございます、
フォルダー内のファイル(写真)の名前を「1.jpg、2.jpg、3.jpg ...」から「yyyymmdd_hhmmss.jpg」に変更したいので、作成を読みたいこれは、写真の名前として設定されます。たとえば、linux-Shellやimagemagickでそれを行う方法を誰かが知っていますか?
ありがとうございました!
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"
これにより、ファイルの名前が変更されます。現在の日付ではなくファイルの日付を表示するようにdate
に指示する_-r
_オプションを使用します。仕様_+"%Y%m%d_%H%M%S"
_は、指定したとおりにフォーマットするようにdate
に指示します。
ファイル名_$f
_は、使用される場合は常に二重引用符で囲みます。これにより、奇妙なファイル名がエラーを引き起こさないことが保証されます。
mv
の_-n
_オプションは、既存のファイルを上書きしないようにmoveに指示します。
done
これでループは完了です。
対話的に使用する場合は、コマンドをすべて1行で記述することをお勧めします。その場合は、以下を使用します。
_for f in *.jpg; do mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"; done
_
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
_
説明:
上記はファイル日付のコマンドに非常に似ていますが、EXIFイメージ作成日付を抽出するためにexiftool
およびawk
を使用しています。
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
もっと簡単な方法があるかもしれませんが。