Каков лучший и самый простой способ сравнить две структуры каталогов, на самом деле не сравнивая данные в файлах? Это хорошо работает:
diff -qr dir1 dir2_
Но это действительно медленно, потому что это сравнивает файлы также. Существует ли переключатель для разности или другой простой cli инструмент, чтобы сделать это?
Следующее (если Вы заменяете первым каталогом directory1 и вторым для directory2) должно сделать то, что Вы ищете и быстро:
find directory1 -type d -printf "%P\n" | sort > file1
find directory2 -type d -printf "%P\n" | sort | diff - file1
Основной принцип - то, что это распечатывает все каталоги включая пути подкаталога относительно основы directoryN каталоги.
Это могло падать (произведите странный вывод), если у Вас есть возвраты каретки в некоторых именах каталогов, но не других.
Я обычно использую rsync
для этой задачи:
rsync -nav --delete DIR1/ DIR2
ОЧЕНЬ СТАРАЙТЕСЬ всегда использовать -n
, иначе --dry-run
, опция, или это будет синхронизироваться (измените содержание), каталоги.
Это сравнит файлы на основе времени изменения файла и размеров... Я думаю, что это - то, что Вы действительно хотите, или по крайней мере Вы не возражаете, если это делает это? Я получил смысл, что Вы просто хотите, чтобы он произошел быстрее, не, что Вам нужен он для игнорирования различия между содержанием файла. Если Вы хотите, чтобы это не перечислило отличающиеся файлы с идентичными именами, я думаю добавление --ignore-existing
опция сделает это.
Также знайте это не помещающее a /
в конце DIR1
заставит это сравнивать каталог DIR1
с содержанием DIR2
.
Вывод заканчивает тем, что был немного подробным, но он покажет Вам, какие файлы/каталоги отличаются. Файлы/каталоги, существующие в DIR2
а не в DIR1
будет снабжен предисловием со словом deleting
.
Для некоторых ситуаций ответ @slartibartfast может быть более соответствующим, хотя необходимо будет удалить -type d
опция включить список файлов некаталога. rsync
будет быстрее, если у Вас будет значительное количество файлов/каталогов для сравнения.
vimdiff <(cd dir1; find . | sort) <(cd dir2; find . | sort)
предоставит вам красивое параллельное отображение двух иерархий каталогов с любыми общими секциями, сложенными в папку.
.vimdiff <(cd dir1; find . | sort) <(cd dir2; find . | sort)
предоставит вам красивое параллельное отображение двух иерархий каталогов с любыми общими секциями, сложенными в папку.
.