Дифференциал содержимого каталога - PullRequest
1 голос
/ 01 декабря 2009

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

Краткий список вещей, которые я рассмотрел:

  • попробуйте создать пару файлов, отсутствующих в каталоге A с новыми файлами в DIR B с помощью некоторых эвристика, такая как 75% совпадения в содержание. Это просто не кажется достаточно надежный (проблемные случаи включают в себя: значительные изменения в содержании, сжатие или шифрование, возможно несколько матчей)
  • использовать альтернативные потоки данных для добавления идентификатора в каждый файл. Это будет работать только на NTFS.
  • добавить колонтитулы к каждому файлу, содержащему и id. Нет никакого способа гарантировать, что верхний / нижний колонтитул не повредит файл.
  • запрашивать ввод данных пользователем для каждого изменения, чтобы определить, действительно ли файл удален или просто перемещен. Это слишком сложно для пользователя.
  • требует, чтобы пользователь переименовывал / перемещал файлы только с помощью специальных команд, которые будут отслеживать такие изменения. Это слишком сложно для пользователя.
  • настройка наблюдателя файловой системы для отслеживания изменений на лету. Несколько проблем (наблюдатель должен работать постоянно, зависит от платформы ...)

Любые идеи приветствуются ...

Ответы [ 4 ]

1 голос
/ 01 декабря 2009

Возможным, не идеальным решением будет система контроля версий, такая как svn или git таким образом, вся история изменений доступна. Но пользователи должны использовать определенные команды.

0 голосов
/ 02 марта 2016

Попробуйте pkgdiff , чтобы визуализировать различия между каталогами:

pkgdiff -d DIR-0/ DIR-1/

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

enter image description here

enter image description here

0 голосов
/ 01 декабря 2009

для соответствия контента я рекомендую использовать какую-то распределенную систему контроля версий, такую ​​как git

он может в значительной степени обнаруживать все файловые операции, такие как копирование, перемещение, переименование,…

0 голосов
/ 01 декабря 2009

Почему бы вам просто не вычислить MD5 / SHA-1 или не вычислить хэш для содержимого папки?

http://en.wikipedia.org/wiki/MD5

Создайте список файлов / папок для A и B. Сравните, которые присутствуют в A, но не в B. Сравните, какие присутствуют в B орех, а не в A. Для тех, которые присутствуют как в A, так и в B, выполните вычисление хеша.

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