
Как использовать rsync (или другую программу) для удаления одинаковых файлов между каталогами? Чтобы они были идентичными, местоположение и метаданные должны совпадать (разрешения, владелец, временная метка)
Например, я делаю резервную копию каталога X в Y. Со временем в X добавляются и удаляются файлы.
Я хочу удалить из X все файлы/каталоги, которые идентичны в Y. Не трогайте файлы в X, которые отличаются.
Примечание: Я знаком с jdupes, но я не пытаюсь удалить просто любые идентичные файлы. Я хочу удалить файлы, которые также идентичны по расположению каталога и имени файла.
решение1
cd /path/to/X
find -type f -exec ls -l {} \; > /tmp/LIST # Get a list of all files in X
cd /path/to/Y
find -type f -exec ls -l {} \; >> /tmp/LIST # Get a list of all files in Y (combine with list from X)
cd /tmp
sort LIST > SORT # Sort all listed
uniq -d SORT > DUP # Exclude files that aren't listed twice
cd /path/to/X
cat /tmp/DUP | xargs -d '\n' rm # Delete all files listed as duplicate
find -type d -empty -delete # Optional, delete all empty directories
Предупреждение-
Это решение сравнивает файлы, используя вывод ls -l
, поэтому оно сравнивает метаданные дата+время+владелец+разрешения+имя файла и не сравнивает байты внутри файлов. Также это небезопасно для файлов с символами новой строки в их имени.