Linux: сравните структуру каталогов без сравнения файлов

Каков лучший и самый простой способ сравнить две структуры каталогов, на самом деле не сравнивая данные в файлах? Это хорошо работает:

diff -qr dir1 dir2_

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

55
задан 17.10.2014, 23:52

3 ответа

Следующее (если Вы заменяете первым каталогом directory1 и вторым для directory2) должно сделать то, что Вы ищете и быстро:

find directory1 -type d -printf "%P\n" | sort > file1
find directory2 -type d -printf "%P\n" | sort | diff - file1

Основной принцип - то, что это распечатывает все каталоги включая пути подкаталога относительно основы directoryN каталоги.

Это могло падать (произведите странный вывод), если у Вас есть возвраты каретки в некоторых именах каталогов, но не других.

36
ответ дан 07.12.2019, 08:23

Я обычно использую rsync для этой задачи:

rsync -nav --delete DIR1/ DIR2

ОЧЕНЬ СТАРАЙТЕСЬ всегда использовать -n, иначе --dry-run, опция, или это будет синхронизироваться (измените содержание), каталоги.

Это сравнит файлы на основе времени изменения файла и размеров... Я думаю, что это - то, что Вы действительно хотите, или по крайней мере Вы не возражаете, если это делает это? Я получил смысл, что Вы просто хотите, чтобы он произошел быстрее, не, что Вам нужен он для игнорирования различия между содержанием файла. Если Вы хотите, чтобы это не перечислило отличающиеся файлы с идентичными именами, я думаю добавление --ignore-existing опция сделает это.

Также знайте это не помещающее a / в конце DIR1 заставит это сравнивать каталог DIR1 с содержанием DIR2.

Вывод заканчивает тем, что был немного подробным, но он покажет Вам, какие файлы/каталоги отличаются. Файлы/каталоги, существующие в DIR2 а не в DIR1 будет снабжен предисловием со словом deleting.

Для некоторых ситуаций ответ @slartibartfast может быть более соответствующим, хотя необходимо будет удалить -type d опция включить список файлов некаталога. rsync будет быстрее, если у Вас будет значительное количество файлов/каталогов для сравнения.

23
ответ дан 07.12.2019, 08:23
ls > dir1.txt

ls > dir2.txt

Затем просто разность два списка.

2
ответ дан 07.12.2019, 08:23
vimdiff <(cd dir1; find . | sort) <(cd dir2; find . | sort)

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

.
34
ответ дан 07.12.2019, 08:23
vimdiff <(cd dir1; find . | sort) <(cd dir2; find . | sort)

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

.
34
ответ дан 07.12.2019, 08:23

Теги

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