Как это сделать, зависит от того, идентичны ли ваши файлы изображений по битам или только визуально похожи (например, потому что они могут иметь разные комментарии или были повторно сжаты, обрезаны ...).
Если файлы идентичны, и вы можете переименовать их как в исходном, так и в вашем архиве, их легко переименовать, чтобы они всегда имели одинаковое имя. Вы можете сохранить старое имя как символическую ссылку. Непроверенные:
for orig in *.jpg; do
canon=$(<"$orig" md5sum | sed 's/ .*//').jpg
mv -i "$orig" "$canon"
ln -s "$canon" "$orig"
done
Это предполагает, что ваш архив является одним каталогом. Если есть подкаталоги, вам нужно изменить *.jpg
на **/*.jpg
(требуется bash 4 или zsh) и договориться добавить нужное количество ../
в команду ln
.
После этого rsync будет копировать только содержимое и имена новых фотографий и новые имена для существующих фотографий.
Если вы можете переименовывать файлы только в вашем архиве, вы все равно можете что-то упорядочить, используя умные ссылки и, вероятно, rsync --copy-unsafe-links
.
Если файлы только визуально похожи, это более сложно, и не может быть полностью автоматизированный ответ (между урезанной версией и некачественной версией, человек должен сделать выбор). Могут помочь некоторые инструменты для сравнения визуально похожих изображений, например, gqview (интерактивный) или findimagedupes (командная строка).
Обратите внимание, что, поскольку вы не указали свою операционную систему, я сделал предложения, которые работают на мою. Они будут работать на любой Unix-подобной системе, включая OSX и Cygwin. Идея символьной ссылки также будет работать в Windows XP и новее (возможно, даже раньше), но требует установки дополнительных инструментов.