2

При копировании фотографий из разных источников в мой основной архив я хотел бы копировать только те файлы, которых еще нет в архиве. rsync или приложения для сравнения файлов, такие как WinMerge и Meld, не могут проверить, существует ли файл с другим именем или в другой подпапке. Сначала копирование всех новых исходных изображений в архив, затем удаление дубликатов, а затем организация файлов, кажется дополнительной работой.

Если есть способ проверить, какие файлы в исходной папке не найдены нигде в папке назначения? Подпапки тоже должны быть проверены. Файл может иметь другое имя или другое местоположение.

3 ответа3

2

Используйте find с md5sum чтобы получить контрольные суммы для всех файлов в источнике и в месте назначения, затем используйте comm чтобы найти контрольные суммы, отсутствующие в месте назначения.

Или вы можете попробовать опцию -y rsync .

0

Как это сделать, зависит от того, идентичны ли ваши файлы изображений по битам или только визуально похожи (например, потому что они могут иметь разные комментарии или были повторно сжаты, обрезаны ...).

Если файлы идентичны, и вы можете переименовать их как в исходном, так и в вашем архиве, их легко переименовать, чтобы они всегда имели одинаковое имя. Вы можете сохранить старое имя как символическую ссылку. Непроверенные:

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 и новее (возможно, даже раньше), но требует установки дополнительных инструментов.

0

Вся вещь " другое имя или в другой подпапке " может быть немного странной, чтобы понять ... Конечно, вы можете сделать сравнение хешей, но по мере увеличения вашего каталога назначения время для слияния будет увеличиваться.

Это не очень модно, но как насчет использования чего-то вроде Robocopy для Windows?

robocopy /E source destination

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .