目录差异和删除

目录差异和删除

有没有一种简单的方法可以(递归地)从目录 A 中删除与目录 B 中的文件相同(相同名称和相同哈希)的所有文件,同时保留结构?

例如,如果 B/file1 存在,则 A/file1 被删除;但尽管 B/d/file1 存在,但 A/file1 并未被删除

答案1

如果您希望 A 中的所有文件都存在于 B 中,那么您可以简单地使用rsync--remove-source-files选项,添加/更新 B 中的文件,以及 A 中的文件,然后从 A 中删除原始文件。rsync在mode 下运行,并通过、和--dry-run管道输出,仅比较两个目录结构,并删除相同的文件,请参阅:grepxargsrm -f

Linux / Unix rsync:传输后删除源文件

rsync --remove-source-files 是逐个删除源文件还是rsync完成后删除?

答案2

你可以做这样的事情。请注意这是未经测试的代码。我假设 $A 和 $B 是你的两个目录:

(cd $B && find . -type f -print) | (cd $A && while read f; do /bin/rm -f "${f}"; done;)

我刚刚尝试过,但将命令回显到标准输出而不是运行它,它似乎工作正常:

$ (cd $B && find . -type f -print) | (cd $A && while read f; do echo /bin/rm -f "${f}";done;)
/bin/rm -f ./1
/bin/rm -f ./2
/bin/rm -f ./3
/bin/rm -f ./4

如果这看起来符合您的要求,请再次运行它,但在命令中省略“echo”一词。

相关内容