Различные файлы, существующие в двух различных каталогах

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

278
задан T Zengerink 8 November 2012 в 23:24
поделиться

4 ответа

Для этого можно использовать команду diff:

diff -bur folder1/ folder2/

Она выведет рекурсивный diff, игнорирующий пробелы, с единым контекстом: флаг

  • b означает игнорирование пробелов
  • u означает единый контекст (3 строки до и после)
  • r означает рекурсивный
401
ответ дан 23 November 2019 в 02:04
поделиться

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

$ man diff

...

-r  --recursive
        Recursively compare any subdirectories found.

...
11
ответ дан 23 November 2019 в 02:04
поделиться

Если это GNU diff, то вы должны быть в состоянии направить его на два каталога и воспользоваться опцией -r.

Иначе попробуйте использовать

for i in $(\ls -d ./dir1/*); do diff ${i} dir2; done

N.B. Как указал Деннис в разделе комментариев, на самом деле вам не нужно делать подстановку команд на ls. Я делаю это так долго, что в основном я делаю это на автопилоте и подставляю команду, которая нужна мне для получения списка файлов для сравнения.

Также я забыл добавить, что я делаю '\ls', чтобы временно отключить мой псевдоним ls в GNU ls, так что я потеряю информацию о цветовом оформлении из списка, возвращаемого GNU ls.

3
ответ дан 23 November 2019 в 02:04
поделиться

Diff имеет опцию -r, которая предназначена именно для этого.

-r dir1 dir2

18
ответ дан 23 November 2019 в 02:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: