如何使用 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
,因此它比较元数据日期+时间+所有者+权限+文件名,而不比较文件内的字节。此外,对于名称中带有换行符的文件,它也不安全。