rsync 一致するファイルのみ削除

rsync 一致するファイルのみ削除

rsync (または別のプログラム) を使用してディレクトリ間で同一のファイルを削除するにはどうすればよいですか? 同一であるためには、場所とメタデータが一致している必要があります (権限、所有権、タイムスタンプ)

たとえば、ディレクトリ X を Y にバックアップします。時間が経つと、X にファイルが追加または削除されます。

Y と完全に一致するすべてのファイル/ディレクトリを X から削除します。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ため、メタデータの日付 + 時刻 + 所有者 + 権限 + ファイル名を比較し、ファイル内のバイトは比較しません。また、名前に改行が含まれるファイルの場合は安全ではありません。

関連情報