首页 > 解决方案 > 如何在linux中通过比较删除两个目录中的相同文件?

问题描述

我想删除两个目录中的相同文件。两者都有很多同名的文件。如果两个文件相同,我想在第一个目录中删除。我不确定 linux shell 是更好的选择还是 python 会更好。

  1. $HOME/bin
  2. $HOME/cin

在某些搜索中,有一个比较接近的答案。

find cin -type f -exec cmp '{}' "bin/{}" \;

但这不起作用,因为find{} 的第一个输出包含“cin/”目录名称,例如“cin/file1”。所以第二个“bin/{}”有“bin/cin/file1”。然后发生比较错误

cmp: bin/cin/file1: No such file or directory

如何比较 cin/file1 和 bin/file1?

标签: bashfindcmp

解决方案


你可以使用这个find命令:

find cin -type f -exec bash -c 'f="${1#cin/}"; cmp "cin/$f" "bin/$f"' _ {} \;

bash -c它对目录中的所有常规文件执行内部命令cin

上层目录被 bash ism ${1#...}删除,变量f设置为相对路径。


推荐阅读