4

Скажем, у меня есть папка с картинками, которую я реорганизовал на одном компьютере. Я хотел бы использовать этот каталог в качестве базы и сравнить его с другой версией на резервном диске. Найдет ли какая-либо программа синхронизации / сравнения, что файл в одной папке перемещен в папку сравнения?

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

6 ответов6

1

Я не знаю ни одного программного обеспечения, которое обнаруживает переименования / перемещения по всей иерархии папок. Это было бы довольно медленно, так как пришлось бы сканировать все файлы, чтобы сравнить их.

Эта функция была когда-то предложена как патч для rsync (в Google это означает «rsync detect-renamed»), но, очевидно, она никогда не была принята в rsync.

rsync имеет ограниченную версию того, что вы ищете:

-у, - нечеткий

Эта опция сообщает rsync, что он должен искать базовый файл для любого файла назначения, который отсутствует. Текущий алгоритм ищет в том же каталоге, что и файл назначения, либо для файла с идентичным размером и временем изменения, либо для файла с аналогичным именем. Если найдено, rsync использует нечеткий базовый файл, чтобы попытаться ускорить передачу.

Это не будет работать, если вы перемещаете файлы между каталогами, хотя.

Тем не менее, большинство программ синхронизации имеют возможность удалять файлы в месте назначения, если они отсутствуют в источнике, поэтому перемещение должно быть реплицировано как new+delete, что требует больше копирования, но будет работать.

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

1

Syncovery

Syncovery выполняет свою работу, если вы использовали ее до реорганизации исходной стороны:

  • Обнаруживает перемещенные файлы. Если вы реорганизовали свои папки, переместив файлы в разные места, Syncovery обнаружит это и быстро выполнит те же действия на другой стороне синхронизации, а не удалит и повторно скопирует файлы.

Если вы не позволите ему сохранить базу данных, он не сможет обнаружить и обработать перемещенные файлы.

Если вы можете использовать Linux, возможно, мой личный подход может помочь:

Поскольку я синхронизирую свои файлы с подключением к webdav, синхронизация с назначением webdav без обнаружения перемещения будет означать большие файловые операции.

Я сделал небольшой скрипт reorg_Remote_Dir_detect_moves.sh (на github), который пытается обнаружить наиболее перемещенные файлы, а затем создает новый временный shell-скрипт с несколькими командами для настройки удаленного каталога. Поскольку я занимаюсь только именами файлов, сценарий не является идеальным решением.

В целях безопасности несколько файлов будут игнорироваться:

  • Файлы с одинаковыми (начальными) именами на каждой стороне
  • Файлы, которые находятся только на удаленной стороне

Пропущенные файлы будут обрабатываться вашим предпочтительным инструментом синхронизации (например, rsync, unison ...), который вы должны использовать после запуска временного shell-скрипта. Так что, может быть, мой сценарий кому-то пригодится. Если это так (чтобы было понятнее), есть три шага:

  1. Запустите сценарий оболочки reorg_Remote_Dir_detect_moves.sh (на github)
  2. Это создаст временный сценарий оболочки /dev/shm/REORGRemoteMoveScript.sh
    => запустить это, чтобы сделать ходы (будет быстро на смонтированном webdav)
  3. Запустите предпочитаемый инструмент синхронизации (например, rsync, unison ...)
1

Все зависит от того, как вы настроили процесс синхронизации.

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

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

Тем не менее, мой собственный любимый продукт синхронизации - FreeFileSync (перейдите в конец страницы).

1

Да, я нашел программное обеспечение, которое делает это лучше, чем любое другое: Super Flexible File Sunchronizer.

Перечислено под особенности:

Обнаруживает перемещенные файлы. Если вы реорганизовали свои папки, переместив файлы в разные места, Super Flexible File Synchronizer обнаружит это и быстро выполнит те же действия, например, на вашем ноутбуке. Никакого постороннего копирования!"

0

Попробуйте Allway Sync, это бесплатно, и у вас не будет дубликатов. Я тоже использую его для резервного копирования моего ноутбука на моем основном компьютере.

0

Я слышал, что программа Microsoft SyncToy имеет такую возможность.

или этот инструмент от Risefly.

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