У меня есть две директории с одинаковым списком файлов. Мне нужно сравнить все файлы, присутствующие в обоих каталогах, используя diff
команду. Есть ли простой вариант командной строки, чтобы сделать это, или мне нужно написать сценарий оболочки, чтобы получить список файлов, а затем выполнить итерацию по ним?
303
diff
команде, загрузив утилиты GNU для Win32 .-b
игнорирует изменения пробелов и-u
дает 3 строки буфера.diff -rub folder1/ folder2/
-bur
было бы легко запомнить, если бы вы жили в холодном климате.Если вас интересуют только файлы, которые отличаются, вы можете использовать:
Опция «q» будет показывать только файлы, которые отличаются, но не содержимое, которое отличается, а «сортировка» организует вывод в алфавитном порядке.
источник
diff
на каждой паре различных файлов. Один подход был бы совершенно другим, если бы только один или два файла отличались от десятков файлов. Я мог потеряться в выводе изdiff
десятков файлов одновременно!-x PATTERN
в команду исключение определенных подкаталогов. Например,diff -qr repo1 repo2 -x ".git"
будет сравнивать две директории (repo1 и repo2), но исключит файлы в папке .git соответствующих каталогов.У Diff есть опция,
-r
которая предназначена именно для этого.diff -r dir1 dir2
источник
diff
может не только сравнивать два файла, но и с помощью этой-r
опции обходить целые деревья каталогов, рекурсивно проверяя различия между подкаталогами и файлами, которые встречаются в сопоставимых точках в каждом дереве.источник
Если это GNU diff, вы должны просто указать его на две директории и использовать опцию -r.
В противном случае попробуйте использовать
NB. Как отметил Деннис в разделе комментариев, вам на самом деле не нужно выполнять подстановку команд в ls. Я делал это так долго, что в значительной степени делаю это на автопилоте и подставляю команду, необходимую для получения списка файлов для сравнения.
Также я забыл добавить, что я делаю '\ ls', чтобы временно отключить мой псевдоним ls для GNU ls, чтобы я потерял информацию о форматировании цвета из списка, возвращаемого GNU ls.
источник
ls
:for i in ./dir1/*
Вот скрипт, чтобы показать различия между файлами в двух папках. Работает рекурсивно. Измените dir1 и dir2.
источник
Если вы специально не хотите сравнивать содержимое файлов и проверяете, какие из них отсутствуют в обоих каталогах, вы можете сравнить списки файлов, сгенерированные другой командой.
-printf '%P\n'
говоритfind
не префиксировать выходные пути с корневым каталогом.Я также добавил,
sort
чтобы убедиться, что порядок файлов будет одинаковым в обоих вызовахfind
.В
grep
конце удаляется информация об идентичных строках ввода.источник
Попробуй это:
источник