Eu usaria o ImageMagick para a maioria das imagens. Isso ocorre porque diferentes implementações de biblioteca produzirão resultados compactados diferentes, o ImageMagick pode realizar uma unificação de compactação.
Os tipos comuns são fáceis porque o sistema operacional possui bibliotecas para lê-los e gravá-los. Então:
find . -type f -name '*.jp*g' -o -type f -name '*.JP*G' \
-exec mogrify -strip -taint -compress JPEG {} \;
find . -type f -name '*.png' -o -type f -name '*.PNG' \
-exec mogrify -strip -taint -compress Lossless {} \;
find . -type f -name '*.gif' -o -type f -name '*.GIF' \
-exec mogrify -strip -taint -compress LZW {} \;
Isso garantirá que você tenha as imagens gravadas da mesma maneira. E então você pode executar:
find . -type f -regextype posix-extended \
-regex ".*\.(jpe?g|JPE?G|png|PNG|gif|GIF)" \
-exec md5sum {} \; > checksums
sort -k 1 checksums |
cut -d ' ' -f 1 |
uniq -d |
while read x; do
grep $x checksums
done
Para os formatos RAW, acredito que a única maneira é fazer o que o Phil diz e, portanto:
find . <blah blah> -exec exiftool -all= {} \;
E então o checksum seria o mesmo. Você só precisa cruzar os dedos para que os formatos de imagem mais exóticos possam ser criados com uma única implementação (ou ter um formato de arquivo rígido).
Aviso de isenção : isso funcionará para comparar as somas de verificação entre si. Se você armazenar as somas de verificação e executar novamente o -strip
após uma atualização de zlib
ou libjpeg
, poderá terminar com somas de verificação completamente diferentes. Você precisa construir as somas de verificação para cada imagem toda vez. Dadas as preocupações sobre a qualidade da imagem, é aconselhável executar apenas uma vez .