Если я хочу найти различия между двумя деревьями каталогов, я обычно просто выполняю:
diff -r dir1/ dir2/
Это выводит именно то, что различия между соответствующими файлами. Я заинтересован в том, чтобы просто получить список соответствующих файлов, содержание которых отличается. Я предполагал, что это просто вопрос передачи параметра командной строки diff
, но я не смог найти ничего на странице руководства.
Какие-либо предложения?
dircmp
команду в Unix (не Linux)Ответы:
Вы сказали Linux, так что вам повезло (по крайней мере, он должен быть доступен, не уверен, когда он был добавлен):
Должен делать то, что вам нужно.
Если вы также хотите увидеть различия для файлов, которые могут не существовать ни в одном каталоге:
источник
diff -qr dir1/ dir2/
и моя расширенная версияdiff -qr dir1/ dir2/ | grep ' differ'
--brief
на ярлык-q
.--brief
.-brief
интерпретируется как-b -r -i -e -f
, другими словами, как набор флагов, а не как одна опция.Команда, которую я использую:
Это точно так же, как и у Марка :) Но его ответ беспокоил меня, поскольку он использует различные типы флагов, и это заставило меня выглядеть дважды. Используя более подробные флаги Марка, это будет:
Я извиняюсь за публикацию, когда другой ответ вполне приемлем. Не могу остановить себя ... работаю над тем, чтобы быть менее педантичным.
источник
q
стенд? Это аббревиатура чего-то? Я не могу найти никакой логики заq
..q
этоquiet
, как правило, означает менее многословно.Мне нравится использовать
git diff --no-index dir1/ dir2/
, потому что это может показать различия в цвете (если у вас есть эта опция установлена в вашем git config) и потому что это показывает все различия в длинном постраничном выводе, используя «less».источник
--no-index
больше на stackoverflow.com/a/1792477/473390 . Я обновил ответ @ alan-porter.--name-status
в командную строку, он просто покажет список имен файлов с флагами "M / A / D" для статуса Модифицированный / Добавленный / Удаленный.Эти две команды в основном делают то, что просили:
Выбор между ними зависит от расположения dir1 и dir2:
Когда каталоги находятся на двух отдельных дисках, diff превосходит rsync. Но когда две сравниваемые директории находятся на одном диске, rsync работает быстрее. Это связано с тем, что diff создает почти одинаковую нагрузку на обе директории параллельно, максимизируя нагрузку на два диска.
rsync вычисляет контрольные суммы в больших кусках, прежде чем сравнивать их. Это группирует операции ввода-вывода в большие порции и приводит к более эффективной обработке, когда все происходит на одном диске.
источник
rsync --options /usr /bin /var /sbin /lib /old_root
, эффективно сравнивает текущий корень/
(указав в нем все подкаталоги) и/old_root
(содержащий, например, некоторую более старую резервную копию/
), чтоdiff -r
может не делай И если вы предполагаете, что файлы с одинаковым размером, разрешениями и временными метками, вероятно, не изменились, исключение--checksum
предоставит вам чрезвычайно быструю (если не так сквозную) проверку того, какие файлы могли измениться.--delete
сrsync
?--dry-run
флагом) ничего действительно не удаляется,rsync
только печатает, какие файлы находятся в dir1, но не в dir2--dry-run
первым всегда, чтобы не случайно забыть об этом.Meld также является отличным инструментом для сравнения двух каталогов:
meld dir1/ dir2/
У Meld есть много опций для сравнения файлов или каталогов. Если два файла отличаются, легко войти в режим сравнения файлов и увидеть точные различия.
источник
meld
становится ужасно вялым, если используется на больших каталогах, хотя. Есть ли что-нибудь, что лучше обрабатывает большие каталоги?find dir1 dir2 | cut -d/ -f2- | sort | uniq --unique
meld <(find dir1 -ls ) <(find dir2 -ls)
работает довольно хорошо, используя замену процесса bash. (Zsh=(command)
работает даже лучше.)Канал соотечественника 'Биллингс' (известности freenode / # centos) поделился со мной своим методом:
Включение прямой косой черты в каталог не имеет значения.
Кроме того, кажется, что
-u
опция недоступна в некоторых старых / серверных версиях diff.Разница в различиях:
источник
--new-file/-N
что заставляет diff считать отсутствующие файлы пустыми, а--text/-a
все двоичные входные данные - текстом. Я не вижу преимуществ для этого конкретного случая использования.Diffoscope - отличный инструмент для работы с каталогами, основанный на командной строке.
Мне особенно нравится, что он может различаться в файлах:
Он не только скажет вам, какие файлы отличаются, но и как они отличаются.
источник
Чтобы найти diff, используйте эту команду:
-r будет также различать все подкаталоги -q заставляет diff сообщать, только когда файлы различаются.
--brief покажет файлы, которые существуют в каталоге.
Или еще
мы можем использовать Meld, который покажет в графическом окне, что легко найти разницу.
источник
--brief
и-q
такой же вариант. Ваше заявление звучит так, будто они разные, но это не так.Вы также можете использовать
Rsync
иfind
. Дляfind
:Но файлы с одинаковыми именами и в тех же подпапках, но с разным содержимым не будут отображаться в списках.
Если вы являетесь поклонником GUI, вы можете проверить оплавления , что @Alexander упоминается. Он отлично работает как в Windows, так и в Linux.
источник
Чтобы сообщить различия между dirA и dirB, а также обновление / синхронизация.
rsync -auv <dirA> <dirB>
источник