
次のように、ファイル名にタイムスタンプを含む写真セットがあります。
Photo on 3-09-12 at 9.24 PM #2.jpg
Photo on 3-09-12 at 9.24 PM #1.jpg
Photo on 3-09-12 at 8.23 PM.jpg
など。
(「3-09-12」は「2012年9月3日」またはDD-MM-YYを意味します)
しかし、この写真にはEXIFデータはまったくありません。このexiftool
情報をより大きなコレクションにインポートする前に、EXIFデータ(すべての写真ファイル名)で新しいタイムスタンプを追加するようにこの情報をパイプして指示できますか?
修正する:(現在のパート1)DD-MM-YYと12時間ファイル名の解析に関する質問に@Stephaneさんが親切に回答しました。しかし、私は同じ写真のコレクションに私が見逃したファイル名のバリエーションが含まれていることがわかりました。 「Pt」を追加する方が意味があることを願っています。 2'全く新しい質問を始める代わりに。
要するに:
@Stephaneの素晴らしい回答をどのように変更できますか?
exiftool '-CreateDate<${FileName;use Date::Manip;
Date_Init("DateFormat=non-US");
/on (.*?at.*?[AP]M)/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
}' ./*on\ *at*[PA]M*.jpg
- 次のファイル名形式を使用できます。これは、YYYY-MM-DDと24時間の時間を使用するという点で、質問の最初の部分とは若干異なります。
Photo on 2010-09-15 at 18.44 #4.jpg
Photo on 2010-09-15 at 18.44 #3.jpg
Photo on 2010-09-15 at 18.44.jpg
さらなる説明:
スティーブンの脚本の一部を編集しようとすることは、Date::Manip
その台本の最も重要な部分で何が起こっているのかわからないことを意味するようでした。
Date_Init
ISOスタイルの年中日付形式に戻ったので、その行を省略しようとしました。
/on (.*?at.*?)/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
' ./*on\ *at*.jpg
しかし、exiftool
私no writeable tags
にFileName not defined
。指示は次の場所にあります。http://search.cpan.org/~sbeck/Date-Manip-5.56/lib/Date/Manip.podこの期間に何が起こっているのか、行の先頭の「y」、セミコロンなどを理解するのに(少なくとも私には)役に立たないようで、検索はほとんど不可能です。
答え1
努力する:
exiftool '-CreateDate<${FileName;use Date::Manip;
Date_Init("DateFormat=non-US");
/on (.*at.*?)(?: #\d+)?\.jpg$/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
}' ./*on\ *at*.jpg
(このモジュールを取り付ける必要があるかもしれませんDate::Manip
perl
)。
-Tag<value
適切なタグを設定してください。処理後${tag;perl-code}
の値に拡張するために使用できます。tag
perl-code
ここでは、計画されたDate::Manip
関数を使用してUnixDate
ファイル名の日付を解析し、タグCreateDate
()で2011-04-15 21:38:00
許可されている形式に変換します。
Date::Manip
さまざまな一般的な日付形式を理解します。たとえば、3-09-12 at 9:24 PM
仕事や月が最初に来るのがアメリカであるかアメリカ以外の規則であるかを知らなければなりませんが)と2010-09-15 at 18.44
(:
代わりにメモ.
)を理解します。
したがって、私たちがしなければならないことは、ファイル名からその部分を抽出して.
変換する:
ことですUnixDate
。