有没有一种简单的方法可以(递归地)从目录 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
管道输出,仅比较两个目录结构,并删除相同的文件,请参阅:grep
xargs
rm -f
答案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”一词。