Разные файлы двух каталогов
Есть два каталога, которые я хотел бы сравнить. Я попытался 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
Я думаю, что это обычное явление при полном исправлении файлов, но я не знаю хорошего решения.
7 ответов
Ты ищешь
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
он подскажет, какой файл сохранить (остальные будут удалены). Extremely useful for removing duplications (I did make a good use of it with my photos)
ПРИМЕЧАНИЕ: да, я знаю, что вопрос был не совсем об этом, но, возможно, это может помочь ему или другим;)
Вы можете попробовать разницу ls
:
ls A > a.txt
ls B > B.txt
diff a.txt b.txt
Ни одной команды, но она должна работать.
Классический ответ - команда 'dircmp'. У него есть свои бородавки (например, передача вывода через 'pr', чтобы разбить его на страницы), но если он даст вам список объектов только в первом или втором каталоге, а затем для общих файлов, он сообщит 'то же самое' или "разные" (и тип файла для не-файлов - каталоги и т. д.).
'Diff -rq' выглядит эквивалентно или лучше, чем вывод 'dircmp'.
Я задал несколько похожий вопрос о переполнении стека, и ответы, которые я получил, могут вас заинтересовать. Мне было особенно интересно найти недостающие файлы при сравнении двух каталогов.
Я также указал, что решение должно иметь дело с переименованными файлами (например, если файл A, который был в каталоге 1, также присутствует в каталоге 2, но был переименован, сценарий должен знать об этом).
Ответ, который я выбрал (он вверху), весьма полезен. Это может стоить посмотреть в качестве отправной точки для вашего сценария.