Я хотел бы сравнить два каталога. Я попробовал diff, но он включает изменения внутри файлов. Все, что я хочу, это что-то вроде этого
file a is just in /A
file b is missing in /A
file c changed
directory d is missing in /A
directory e is just in /A
Я думаю, что это обычное дело при исправлении полного файла, но я не знаю хорошего решения.
Вы ищете
diff -rq (dir1) (dir2)
Подтверждение концепции:
#!/bin/sh
#create our test
mkdir -p /tmp/a/b
echo "test" >> /tmp/a/c
mkdir -p /tmp/a/d/e
echo "blah" >> /tmp/a/d/e/f #only exists here
mkdir -p /tmp/q/b
echo "testing" >> /tmp/q/c #/tmp/a/c shouldnt match
mkdir -p /tmp/q/d/e
echo "blah" >> /tmp/q/d/e/g #only exists here
diff -rq /tmp/a /tmp/q
приводит к:
Files /tmp/a/c and /tmp/q/c differ
Only in /tmp/a/d/e: f
Only in /tmp/q/d/e: g
Вам просто нужно включить -q флаг, чтобы сделать его кратким:
# diff -q dir1 dir2
Files dir1/both and dir2/both differ
Only in dir1/: one
Only in dir2:/ two
Если вы хотите сравнить файлы на основе, например, размер, который вы можете сделать:
# ls -al DIR_1 |awk '{print $5, $9}'|sort > 1.txt
# ls -al DIR_2 |awk '{print $5, $9}'|sort > 2.txt
и тогда:
# diff 1.txt 2.txt
чтобы узнать, какие файлы у них разные или отсутствуют. Я использовал это, когда мне приходилось сравнивать два каталога с очень большими файлами, чтобы увидеть, какие файлы загружены не полностью.
Для поиска дубликатов вы используете:
fdupes -r1 dir1 dir2
Хотя другие дали вам множество хороших советов, вам тоже стоит попробовать.
Если вы используете
fdupes -rd dir1 dir2
он предложит вам, какой файл сохранить (остальные будут удалены). Чрезвычайно полезно для удаления дубликатов (я хорошо использовал это для своих фотографий)
ПРИМЕЧАНИЕ: да, я знаю, что вопрос был не совсем об этом, но, возможно, это поможет ему или другим;)
Вы можете попробовать ls
:
ls A > a.txt
ls B > B.txt
diff a.txt b.txt
Ни одной команды, но она должна работать.
Классический ответ - команда dircmp. У него есть свои недостатки (например, передача вывода через 'pr' для его разбивки на страницы), но если он предоставит вам список объектов только в каталоге один или каталоге два, а затем для общих файлов он сообщает `` то же самое '' или 'другой' (и тип файла для не файлов - каталоги и т. д.).
«Diff -rq» выглядит эквивалентно или лучше, чем результат «dircmp».
я попросил несколько похожий вопрос о переполнении стека, и ответы, которые я получил, могут быть вам интересны. Мне было особенно интересно найти недостающие файлы при сравнении двух каталогов.
Я также указал, что решение должно иметь дело с переименованными файлами (например, если файл A, который находился в каталоге 1, также присутствует в каталоге 2, но был переименован, сценарий должен знать об этом).
Ответ, который я выбрал (он вверху), весьма полезен. Возможно, стоит взглянуть на него как на отправную точку для вашего сценария.