Чтобы получить надежный обзор, вам понадобятся единые и сортируемые списки файлов в обоих каталогах и способ сравнения этих двух списков.
Как уже указывалось, diff
предназначен для создания удобочитаемых, семантически понятных обзоров различий между файлами. Это делает его очень подходящим для сравнения простого текста или кода, но менее подходящим для сравнения списков.
Вместо этого используйте, comm
чтобы найти сходства или различия между двумя списками.
Чтобы создать «чистый» список, который содержит только ту информацию, которая вам нужна, используйте -printf
опцию, предоставляемую GNU find
. Это более эффективно и надежно, чем порождение ls
процесса для каждого файла, и может напрямую выводить полезную информацию, такую как:
%Tk File's last modification time in the format specified by k
%s File's size in bytes
%p File's name
Собираем все вместе:
- Перечислите файлы в каждом каталоге (в формате, который содержит только необходимую информацию) →
find … -printf …
- Сортировать списки →
sort
- Найти все строки, которые не совпадают между списками →
comm -3
: «подавить столбец 3 (строки, которые появляются в обоих файлах)»
cd dir1 && find . -printf '%T+ %s %p\n' | sort > ../dir1.txt && cd .. cd dir2 && find . -printf '%T+ %s %p\n' | sort > ../dir2.txt && cd .. comm -3 dir1.txt dir2.txt > differences.txt
Одно предупреждение с %T+
: формат даты будет включать доли секунды (2018-11-25 + 14: 58: 43.1197033990). Если ваши два каталога хранятся в разных файловых системах с разной точностью дат, вам, возможно, придется использовать другой (ручной) формат даты, чтобы исключить доли секунды.