exiv2 canalizado para grep - comportamento inconsistente aleatório

0

Para um monte de jpg fotos, eu tenho esse script (simplificado) para poder extrair a data original quando a foto foi tirada (se diferente de 0000: 00: 00, não relevante para este caso)

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

Mas o canal de exiv2 a grep às vezes recupera as informações presentes nos metadados das fotos, às vezes não. O conjunto de testes da lista de arquivos é:

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

O que eu recebo disso é um resultado inconsistente, como:

$ 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

Uma segunda vez (o script conseguiu grep como esperado):

$ 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

Uma terceira vez (não é possível usar a informação solicitada, embora tenha sido diferente da primeira tentativa:

$ 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

E assim por diante.

Estou executando o Slackware64 14.2 Linux com:

$ grep -V
grep (GNU grep) 2.25

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

Gostaria de saber por que isso está acontecendo e como lidar com isso.

Edit: Isso acontece com este conjunto de arquivos (cinco no exemplo como uma amostra do 76 do diretório original), mas não aconteceu com centenas de outros em dezenas de diretórios que eu apliquei sem problemas. / p>     

por Luis 08.07.2016 / 17:06

1 resposta

0

Luis, sua última edição explica tudo. Não é o seu código que está quebrado; são os metadados de determinados arquivos jpeg específicos. Não sei como consertar isso, mas pelo menos posso dizer que você precisa procurar a resposta nos próprios arquivos jpeg. Eu acho que o Gimp e o ImageMagick vão deixar você consertar esse tipo de coisa, mas você teria que ler os manuais para descobrir como mudar os metadados com esses aplicativos. Espero que ajude.

    
por 08.07.2016 / 18:35