Bash 在linux中,如何通过比较删除两个目录中的相同文件?

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”。然后发生比较

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

  • $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#