exivで画像名をEXIF日付/時刻に変更する場合は、次の操作を行います。
find . -iname \*jpg -exec exiv2 -v -t -r '%Y_%m_%d__%H_%M_%S' rename {} \;
これで、イメージのタイムスタンプはまったく同じになります(秒を含む)。ファイル名を自動的に一意にする方法は?
このコマンドは、同じディレクトリ構造で再度実行すると(新しい画像を追加した後)、名前が変更された画像が変更されないようにし、既存のファイル名で画像を追加した場合、新しいファイル名も一意である必要があるため、安定している必要があります。 。
私の最初の試みは、結果のファイル名に元のデフォルト名を保持することでしたが、上記の意味では、そのコマンドは安定していません。
答え1
試してみたいかもしれませんjhead
代わりに、デフォルトで動作します(a
、b
...z
サフィックスを使用し、同じ日付の最大27ファイルを許可します)@meuhで言及された安定性の問題はありません。
find . -iname '*jpg' -exec jhead -n%Y_%m_%d__%H_%M_%S {} +
または、以下を使用しますexiftool
(マンページの例):
exiftool -ext jpg '-FileName<CreateDate' -d %Y_%m_%d__%H_%M_%S%%-c.%%e .
(ここに%-c
;;で始まる数字のサフィックスがあります。-
ファイルがすでに存在する場合は追加されます。)
(貢献された回答とコメントに基づいて修正):
元のファイル名を保持するには、以下を追加します_%%f
。
exiftool -ext jpg '-FileName<CreateDate' -d %Y_%m_%d__%H_%M_%S%%-c_%%f.%%e .
答え2
私のバージョンexiv2
(0.25 001900)は、ファイル名がすでに存在しているときに何をすべきかを対話的に尋ねます。
exiv2: File `./2013_06_19__14_03_13.jpg' exists. [O]verwrite, [r]ename or [s]kip?
オプションを追加すると、名前に追加の-F
項目(またはなど)が自動的に追加されます。_1
_2
Renaming file to ./2013_06_19__14_01_53_1.jpg, updating timestamp
コマンドを2回目に実行すると、次のようになります。
This file already has the correct name
何もしませんが、そのセクションがあると_1
混乱して名前が変わります_2
。非破壊的な方法で実行されるたびに、このように切り替えられます。必要に応じて、このオプションを無視するか、特定のfind
部分日付パターンに一致するファイルを無視するようにパターンを変更できます_
。
たとえば、日付形式は正規表現パターンで始まります[0-9]{4}_[0-9]{2}_...
。簡単にするために、set sum、regexで0..9
20文字の混合を探します。これを行うには、サフィックスの後に探している数字の少なくとも1桁が続きます。正規表現はデフォルト名だけでなくフルパスと一致する必要があるため、ディレクトリを含む最終正規表現はです。_
[0-9_]{20}
_
_[0-9]{1,}.jpg
.*/[0-9_]{20}_[0-9]{1,}.jpg
したがって、次のクエリを使用できます。
find . -regextype posix-extended ! -iregex '.*/[0-9_]{20}_[0-9]{1,}.jpg' -iname '*.jpg' ...
答え3
Exiv2はこの問題を独自に処理できます。私もexiv2のマニュアルを見るまでこの部分の助けを見つけるのに多くの時間を費やしました。 -Fオプションはこの問題を解決します。
exiv2 -r'%Y_%m_%d__%H_%M_%S' -F *.jpg
ファイルがすでに存在する場合は、最後に_Nが追加されます。
フォルダの作成を許可するオプションを探している人のためです。
exiftool -r '-FileName<DateTimeOriginal' -d %Y/%m/%d/%%f%%-c.%%e *
答え4
PyrenamerはUbuntu 16.04を新しくインストールした場合は機能しないため、この問題を解決するには他の方法も見つける必要があります。
私のフォルダの1つにIMG_0001.JPG、IMG_0002.JPGなどのファイルがあります。このウェブサイトを確認してください。 https://stackoverflow.com/questions/917260/can-var-parameter-expansion-expressions-be-nested-in-bash
まず、「exiv2」をインストールするために次のコマンドラインを作成しました。
$(ls *.[Jj][Pp][Gg] 2> /dev/null) の img の場合 exiv2 -r'%Y%m%d_%H%M%S_'"$(tmp=$ { img %%.*};echo ${tmp##*_})" "$img" の名前変更;完了
出力ファイル名はYYYYMMDD_HHMMSS_0001.JPG、YYYYMMDD_HHMMSS_0002.JPGなどです。同じ瞬間に写真を撮影しても、元の写真のシリアル番号は異なります。