Один вариант будет использовать rsync
. Что-то вроде:
rsync -n -r -v -C dir_a dir_b
Опция -n
выполняет пробный запуск, поэтому файлы не будут изменены. -r
делает рекурсивное сравнение. При желании включите подробный режим с помощью -v
. (Вы можете использовать -i
для перечисления изменений вместо -v
.) Чтобы игнорировать обычно игнорируемые файлы, такие как .svn/
, используйте -C
.
Это должно быть быстрее простого diff
, когда я читаю справочную страницу rsync
:
Rsync находит файлы, которые необходимо передать, используя «быструю проверку»
алгоритм (по умолчанию), который ищет файлы, которые изменились в размере
или в последний раз измененное время. Любые изменения в другом сохранены
атрибуты (в соответствии с параметрами) создаются в файле назначения
непосредственно, когда быстрая проверка показывает, что данные файла не
необходимо обновить.
Поскольку алгоритм «быстрой проверки» не смотрит непосредственно на содержимое файла, его можно обмануть. В этом случае может потребоваться опция -c
, которая вместо этого выполняет контрольную сумму. Скорее всего, будет быстрее, чем обычный diff
.
Кроме того, если вы планируете синхронизировать каталоги в какой-то момент, это также хороший инструмент для этой работы.