Разные файлы двух каталогов

Есть два каталога, которые я хотел бы сравнить. Я попытался 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, но был переименован, сценарий должен знать об этом).

Ответ, который я выбрал (он вверху), весьма полезен. Это может стоить посмотреть в качестве отправной точки для вашего сценария.

Другие вопросы по тегам