exiv2をgrepにパイプする - ランダムに一貫性のない動作

exiv2をgrepにパイプする - ランダムに一貫性のない動作

複数のjpg写真の写真を撮った元の日付を抽出するための(簡素化された)スクリプトがあります(0000:00:00と異なる場合は関係ありません)。

for f in *.jpg;
do 
    echo -n $f "  >>  " ;
    /usr/bin/exiv2 -P E  pr $f  | grep 'Exif.Photo.DateTimeOriginal';
done

ただし、パイプラインは写真のメタデータにある情報を検索するexiv2場合もあれば、そうでない場合もあります。grepファイルリストテストセットは次のとおりです。

$ ls
sany0070.jpg  sany0071.jpg  sany0072.jpg  sany0073.jpg  sany0074.jpg

私が得たのは、次の一貫性のない結果です。

$ for f in *.jpg; do echo -n $f "  >>  " ; /usr/bin/exiv2 -P E  pr $f  | grep 'Exif.Photo.DateTimeOriginal'; done
sany0070.jpg   >>  Exif.Photo.DateTimeOriginal                  Ascii      20  0000:00:00 00:00:00
sany0071.jpg   >>  Exif.Photo.DateTimeOriginal                  Ascii      20  0000:00:00 00:00:00
sany0072.jpg   >>  Exif.Photo.DateTimeOriginal                  Ascii      20  0000:00:00 00:00:00
sany0073.jpg   >>  Binary file (standard input) matches
sany0074.jpg   >>  Binary file (standard input) matches

2番目(スクリプトは期待どおりにgrepできます):

$ for f in *.jpg; do echo -n $f "  >>  " ; /usr/bin/exiv2 -P E  pr $f  | grep 'Exif.Photo.DateTimeOriginal'; done
sany0070.jpg   >>  Exif.Photo.DateTimeOriginal                  Ascii      20  0000:00:00 00:00:00
sany0071.jpg   >>  Exif.Photo.DateTimeOriginal                  Ascii      20  0000:00:00 00:00:00
sany0072.jpg   >>  Exif.Photo.DateTimeOriginal                  Ascii      20  0000:00:00 00:00:00
sany0073.jpg   >>  Exif.Photo.DateTimeOriginal                  Ascii      20  0000:00:00 00:00:00
sany0074.jpg   >>  Exif.Photo.DateTimeOriginal                  Ascii      20  0000:00:00 00:00:00

3回目の試み(最初の試みとは異なりますが、要求された情報が見つかりませんでした:

$ for f in *.jpg; do echo -n $f "  >>  " ; /usr/bin/exiv2 -P E  pr $f  | grep 'Exif.Photo.DateTimeOriginal'; done
sany0070.jpg   >>  Exif.Photo.DateTimeOriginal                  Ascii      20  0000:00:00 00:00:00
sany0071.jpg   >>  Exif.Photo.DateTimeOriginal                  Ascii      20  0000:00:00 00:00:00
sany0072.jpg   >>  Binary file (standard input) matches
sany0073.jpg   >>  Exif.Photo.DateTimeOriginal                  Ascii      20  0000:00:00 00:00:00
sany0074.jpg   >>  Exif.Photo.DateTimeOriginal                  Ascii      20  0000:00:00 00:00:00

など。

私はSlackware64 14.2 Linuxを実行しています。

$ grep -V
grep (GNU grep) 2.25

$ exiv2 --version
exiv2 0.25 001900 (64 bit build)

なぜこれが起こるのか、どのように対処すべきかを知りたいです。

編集:このファイルセット(元のディレクトリにある76ファイルのサンプルである例の5ファイル)で発生しますが、それを適用した数十のディレクトリにある他の何百ものファイルでは問題は発生しません。

ベストアンサー1

Louis、あなたの最後の編集はすべてを説明します。コードが破損しているのではなく、コードが破損しています。一部の特定のJPEGファイルのメタデータ。この問題をどのように解決するかはわかりませんが、少なくともjpegファイル自体で答えを見つける必要があることをお伝えします。私の考えでは、GimpとImageMagickを使ってこれらの問題を解決することができます。ただし、これらのアプリケーションを使用してメタデータを変更する方法を理解するには、ドキュメントを読む必要があります。お役に立てば幸いです。

おすすめ記事