@0xC0CAC01A

Как в линуксе сравнить два дерева директорий, но без проверки содержимого файлов, только проверить совпадение размеров и дат?

diff --brief --recursive /dir1 /dir2пытается всё перечитать, это будет несколько дней
  • Вопрос задан
  • 712 просмотров
Пригласить эксперта
Ответы на вопрос 4
xotkot
@xotkot
хорошо есть и хорошо весьма
diff <(tree -sixfD --noreport Dir1) <(tree -sixfD --noreport Dir2)
Ответ написан
Комментировать
Можно сделать ls рекурсивно и сделать diff по выводу ls

UPD: вот такое решение мне предложил ChatGPT:
diff \
  <(find <путь_к_первой_папке> -type f -exec stat -c "%s %n" {} \; | sort) \
  <(find <путь_к_второй_папке> -type f -exec stat -c "%s %n" {} \; | sort)

Это решение использует `find` для рекурсивного обхода директорий и поиска всех файлов. Затем команда `stat -c "%s %n"` используется для получения размера файла и его полного пути. Результаты обоих `find` команд сортируются перед сравнением с помощью `diff`.

Вы можете заменить `<путь_к_первой_папке>` и `<путь_к_второй_папке>` на соответствующие пути к папкам, которые вы хотите сравнить.


UPD2: Более лаконичный вариант через rsync (но не факт что работает):
rsync -n -r --size-only <путь_к_первой_папке>/ <путь_к_второй_папке>/

Это решение использует `rsync` с опцией `-n` для симуляции операции без фактического копирования файлов. Опция `-r` используется для рекурсивного обхода директорий, а `--size-only` для сравнения только размеров файлов, без проверки содержимого.

Вы можете заменить `<путь_к_первой_папке>` и `<путь_к_второй_папке>` на соответствующие пути к папкам, которые вы хотите сравнить.
Ответ написан
Adamos
@Adamos
У графического meld есть именно такой режим сравнения, весьма наглядный.
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Можно rsync-ом сравнивать, без синхронизации. По умолчанию он как раз сравнивает по дате и размеру:

rsync --dry-run -v /путь1 /путь2
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы