Чи є інструменти Linux / Unix, які знаходять усі файли в одній директорії, відсутні в іншій? В основному я шукаю diff, який працює на виході ls.
Також вдячні короткі та солодкі сценарії.
Чи є інструменти Linux / Unix, які знаходять усі файли в одній директорії, відсутні в іншій? В основному я шукаю diff, який працює на виході ls.
Також вдячні короткі та солодкі сценарії.
Відповіді:
diff
робить це вже:
diff dir1 dir2
Приклад виводу:
Only in dir1: some_file.txt
Only in dir1: some_other_file.txt
Only in dir2: third_file.txt
Bash:
diff <(cd dir1; ls) <(cd dir2; ls)
Порівняйте лише імена файлів - не вміст файлів.
ls
, використовуйте find
замість цього!
Якщо ви хочете це зробити і через усі підкаталоги, хороший спосіб це зробити:
diff --brief -r dir1/ dir2/
Я вважаю за краще використовувати короткий, але ви можете залишити це, якщо хочете.
Денніс Вільямсон мав хорошу відповідь , але мені потрібно було це робити рекурсивно. GNU findutils 4.7.0 не сортує його вихід, тож ось що я використав
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort)
Щоб зробити це лише одним способом і створити список файлів, я використав це:
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort) \
| grep '< ./' | sed "s,< ./,$dir1/,"
Щоб це працювало належним чином, ні $ dir1, ні $ dir2 не повинні містити продільну косу рису.
diff dir1 dir2 | grep "Only"