Как эффективно сравнить 15000 файлов несколько раз? - PullRequest
1 голос
/ 21 января 2009

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

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

Ответы [ 6 ]

8 голосов
/ 21 января 2009

Если вы готовы потратить немного денег, Beyond Compare - это довольно мощный инструмент для анализа различий, который может выполнять анализ на основе папок.

Beyond Compare

7 голосов
/ 21 января 2009

Я лично использую WinMerge и считаю его очень полезным. У него есть фильтры, которые исключают файл SVN. Под Linux я предпочитаю Meld .

4 голосов
/ 21 января 2009

Один вариант будет использовать rsync. Что-то вроде:

rsync -n -r -v -C dir_a dir_b

Опция -n выполняет пробный запуск, поэтому файлы не будут изменены. -r делает рекурсивное сравнение. При желании включите подробный режим с помощью -v. (Вы можете использовать -i для перечисления изменений вместо -v.) Чтобы игнорировать обычно игнорируемые файлы, такие как .svn/, используйте -C.

Это должно быть быстрее простого diff, когда я читаю справочную страницу rsync:

Rsync находит файлы, которые необходимо передать, используя «быструю проверку» алгоритм (по умолчанию), который ищет файлы, которые изменились в размере или в последний раз измененное время. Любые изменения в другом сохранены атрибуты (в соответствии с параметрами) создаются в файле назначения непосредственно, когда быстрая проверка показывает, что данные файла не необходимо обновить.

Поскольку алгоритм «быстрой проверки» не смотрит непосредственно на содержимое файла, его можно обмануть. В этом случае может потребоваться опция -c, которая вместо этого выполняет контрольную сумму. Скорее всего, будет быстрее, чем обычный diff.

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

1 голос
/ 21 января 2009

Если вы используете Linux или какой-либо другой вариант, вы должны сделать:

prompt $ diff -r dir1 dir2 --exclude = .svn

-r вызывает рекурсивный поиск. Есть несколько переключателей, которые игнорируют такие вещи, как пробелы и т. Д.

1 голос
/ 21 января 2009

Используйте всего командира! Все крутые разработчики используют его:)

1 голос
/ 21 января 2009

Не надежно, но вы можете просто сравнить временные метки.

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