rsync Удалить только соответствующие файлы

rsync Удалить только соответствующие файлы

Как использовать 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, поэтому оно сравнивает метаданные дата+время+владелец+разрешения+имя файла и не сравнивает байты внутри файлов. Также это небезопасно для файлов с символами новой строки в их имени.

Связанный контент