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

두 번째(스크립트는 예상대로 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

세 번째 시도(첫 번째 시도와는 달랐지만 요청한 정보를 찾을 수 없음:

$ 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을 사용하면 이러한 문제를 해결할 수 있을 것입니다. 하지만 이러한 응용 프로그램을 사용하여 메타데이터를 변경하는 방법을 이해하려면 설명서를 읽어야 합니다. 도움이 되길 바랍니다.

관련 정보