Назад | Перейти на главную страницу

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

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

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