Подтвердить что ты не робот

Учитывая два дерева каталогов, как узнать, какие файлы отличаются?

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

diff -r dir1/ dir2/

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

Любые предложения?

4b9b3361

Ответ 1

Вы сказали Linux, так что вам повезло (по крайней мере, он должен быть доступен, не уверен, когда он был добавлен):

diff --brief -r dir1/ dir2/

Должен делать то, что вам нужно.

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

diff --brief -Nr dir1/ dir2/

Ответ 2

Используемая мной команда:

diff -qr dir1/ dir2/

Это точно так же, как и Марк:) Но его ответ беспокоил меня, поскольку он использует разные типы флагов, и это заставило меня посмотреть дважды. Используя Mark более подробные флаги, это будет:

diff  --brief --recursive dir1/ dir2/

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

Ответ 3

Мне нравится использовать git diff --no-index dir1/ dir2/, потому что он может показать различия в цвете (если у вас есть эта опция, установленная в вашей конфигурации git), и потому, что она показывает все различия в длинном выведенном в эфир выводе с использованием "меньше",.

Ответ 4

Эти две команды выполняют в основном задание:

diff --brief --recursive --no-dereference --new-file --no-ignore-file-name-case /dir1 /dir2 > dirdiff_1.txt

rsync --recursive --delete --links --checksum --verbose --dry-run /dir1/ /dir2/ > dirdiff_2.txt

Выбор между ними зависит от расположения dir1 и dir2:

Когда каталоги находятся на двух отдельных дисках, diff превосходит rsync. Но когда два сопоставленных каталога находятся на одном диске, rsync работает быстрее. Это потому, что diff ставит почти равную нагрузку на обе каталоги параллельно, максимизируя нагрузку на два диска.

rsync вычисляет контрольные суммы в больших кусках до фактического их сравнения. Это группирует операции ввода-вывода в больших кусках и приводит к более эффективной обработке, когда все происходит на одном диске.

Ответ 5

Канал соотечественника 'billings' (из freenode/# centos fame) поделился своим методом со мной:

diff -Naur dir1/ dir2

Включение конечной косой черты в обратном направлении не имеет значения.

Кроме того, похоже, что опция -u недоступна в некоторых версиях diff более ранних версий/серверов.

Разница в различиях:

# diff -Nar /tmp/dir1 /tmp/dir2/
diff -Nar /tmp/dir1/file /tmp/dir2/file
28a29
> TEST

# diff -qr /tmp/dir1/ /tmp/dir2/
Files /tmp/dir1/file and /tmp/dir2/file differ

Ответ 6

Meld - отличный инструмент для сравнения двух каталогов:

meld dir1/ dir2/

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

Ответ 7

Diffoscope - отличная утилита для поиска на основе командной строки.

Мне особенно нравится, что он может различаться в файлы:

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

Он не только скажет вам, какие файлы отличаются, но и то, как они отличаются.

Ответ 8

Вы можете также использовать Rsync и find. Для find:

find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER

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

Если вы являетесь поклонником GUI, вы можете проверить Meld, что @Alexander. Он отлично работает как в окнах, так и в linux.