Como checar a integridade de todos os arquivos JPG dentro de um dispositivo de armazenamento

É muito comum guardar nossas imagens jpeg em um diretório, em um CD/DVD ou em mídias de armazenamento de maior capacidade, cartões de memório, Bluray etc.
Esta dica é voltada para quem deseja verificar uma quantidade enorme ou “absurda” de arquivos jpeg e ser avisado quando houver erros leves ou críticos em seus arquivos — e, obviamente, saber quais arquivos são estes.
O procedimento faz uso do utilitário jpeginfo, combinado ao comando grep. Clique nos links, caso queria obter mais informações sobre algum assunto.
Estou descrevendo um procedimento que me foi muito útil para verificar algumas milhares de fotos que tinha armazenado em CDs e DVDs antigos, que eu precisava passar para um drive externo.
O aplicativo jpeginfo tem versões para Windows e Mac também e o procedimento pode ser realizado, com algumas adaptações, nesta plataformas também — embora eu não tenha testado.
Abra um terminal, entre o diretório onde estão suas imagens e execute o comando abaixo, adequando-o aonde for necessário:

find -iname “*.jpg” -print0 | xargs -0 jpeginfo -c | grep -e WARNING -e ERROR

Qualquer arquivo jpeg (com extensão jpg), cujo teste tenha retornado algum tipo de erro ou aviso de irregularidade, será listado abaixo:

./20141121_093803.jpg 2560 x 1536 24bit Exif  N 3184905  Corrupt JPEG data: premature end of data segment  [WARNING]
./elias-featured/temp/20140606_163321.jpg 2560 x 1920 24bit Exif  N 4303316  Corrupt JPEG data: premature end of data segment  [WARNING]
./logos/breebsd-beastie-photo.jpg  Not a JPEG file: starts with 0x89 0x50  [ERROR]
./logos/fedora-274-logo.jpg  Not a JPEG file: starts with 0x89 0x50  [ERROR]
./netbeans-7.0.1and-nightly-build.jpg  Not a JPEG file: starts with 0x89 0x50  [ERROR]
./trafficlight04.jpg  Not a JPEG file: starts with 0x89 0x50  [ERROR]
./wallpapers/dell/dell-logo-2014-wallpaper-1.jpg  Not a JPEG file: starts with 0x89 0x50  [ERROR]

Note que o comando vasculha também os subdiretórios recursivamente. Além disto, ele é case insensitive (não diferencia letras maiúsculas/minúsculas).
O funcionamento da linha de comando é simples: a busca é feita com o comando find e vai repassando os nomes dos arquivos para o xargs. Este último executa o aplicativo jpeginfo para cada arquivo que recebe.
O comando grep irá filtrar os resultados, para exibir apenas os que contiverem as palavras “WARNING” e “ERROR”.
Você provavelmente ficará surpreendido com alguns resultados.
O JPEG é bastante resiliente e muitos arquivos defeituosos funcionarão como se tudo estivesse bem com o seu conteúdo.

Como verificar imagens PNG

O utilitário jpeginfo é voltado exclusivamente para arquivos JPEG.
Para verificar imagens de outro tipo, use o aplicativo identify, em um procedimento quase idêntico:

find -iname "*.png" -print0 | xargs -0 identify | grep -i error
./apt-get_install_audacity_error.png[52] PNG 577x187 577x187+0+0 8-bit sRGB 28.2KB 0.000u 0:00.000
identify: improper image header `./logos/facebook/Like-button-2015-06/__MACOSX/._like-button-2015-06.png' @ error/png.c/ReadPNGImage/3930.
identify: cHRM: inconsistent chromaticities `./media/Debian/la-vaquerita-de-jessie-persona.png' @ warning/png.c/MagickPNGWarningHandler/1671.

Simples, assim.
Boa sorte!

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia. Fã de séries, como "Rick and Morty" e "BoJack Horseman". Me siga no Twitter e vamos trocar ideias!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *