Bash 在linux中,如何通过比较删除两个目录中的相同文件?
我想删除两个目录中的相同文件。 两者都有许多同名文件。如果两个文件相同,我想删除第一个目录中的文件。 我不确定linux shell是更好的选择还是python会更好Bash 在linux中,如何通过比较删除两个目录中的相同文件?,bash,find,cmp,Bash,Find,Cmp,我想删除两个目录中的相同文件。 两者都有许多同名文件。如果两个文件相同,我想删除第一个目录中的文件。 我不确定linux shell是更好的选择还是python会更好 $HOME/bin $HOME/cin 在一些搜索中,有一个比较接近的答案 find cin -type f -exec cmp '{}' "bin/{}" \; 但这不起作用,因为find,{}的第一个输出包含“cin/”目录名,如“cin/file1”。所以第二个“bin/{}”有“bin/cin/file1”。然后发生比较
$HOME/bin
$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?您可以使用此
查找命令:
find cin -type f -exec bash -c 'f="${1#cin/}"; cmp "cin/$f" "bin/$f"' _ {} \;
它对cin
目录中的所有常规文件执行bash-c
中的命令
上面的目录被bashism${1#…}
删除,变量f
被设置为相对路径。并且我尝试了-printf“%f\n”或basename{}。它们只影响“find”的标准输出,但看起来它们没有进入{}。您可以从cin
文件夹(find.-type…
)运行它,并使用。/bin/{}
。这应该可以解决路径问题。您是否考虑过使用fdupes
?@hradecek,没错!如果它在目录中运行,它就可以工作。你会解释更多关于bashism的内容还是参考更多的网页?“underbar”的作用是什么?对于你的第一个问题和第二个问题,你可以看看man-pager='less-p\\${parameter#
。