Я бы выбрал ImageMagick для большинства изображений. Это связано с тем, что разные реализации библиотеки будут давать разные сжатые результаты, ImageMagick может выполнять унификацию сжатия.
Общие типы просты, потому что в ОС есть библиотеки для их чтения и записи. Итак:
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 {} \;
Это гарантирует, что изображения будут записаны одинаково. И затем вы можете выполнить:
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
Для форматов RAW я считаю, что единственный способ - это сделать, как говорит Фил, и поэтому:
find . <blah blah> -exec exiftool -all= {} \;
И тогда контрольная сумма будет такой же. Вам просто нужно скрестить пальцы, что более экзотические форматы изображений могут быть созданы с помощью одной реализации (или иметь жесткий формат файла).
Заявление об ограничении ответственности : Это будет работать для сравнения контрольных сумм между собой. Если вы сохраните контрольные суммы, а затем повторно запустите -полосу
после обновления zlib
или libjpeg
, вы можете получить совершенно другие контрольные суммы. Вам нужно каждый раз строить контрольные суммы для каждого изображения. Учитывая опасения по поводу качества изображения, разумно запустить это только один раз .