【问题标题】:Bash : Find and Remove duplicate files from different foldersBash:从不同文件夹中查找和删除重复文件
【发布时间】:2017-05-17 06:18:59
【问题描述】:

我有两个包含一些常用文件的文件夹,我想从xyz 文件夹中删除重复文件。

文件夹 1:

/abc/file1.csv 
/abc/file2.csv
/abc/file3.csv
/abc/file4.csv

文件夹2:

/xyz/file1.csv
/xyz/file5.csv

我想比较这两个文件夹并从/xyz 文件夹中删除重复项。输出应该是:file5.csv

现在我正在使用:

find "/xyz" "/abc" "/abc" -printf '%P\n' | sort | uniq -u | -exec rm {} \;

但它失败的原因是:如果-exec 不是拼写错误,您可以运行以下命令来查找包含二进制文件的包:

command-not-found -exec
-bash: -exec: command not found

【问题讨论】:

    标签: bash shell unix


    【解决方案1】:

    -exec 是find 的一个选项,您在启动管道时已经退出了命令find。

    改用xargs,它会从标准输入中获取所有数据并附加到程序中。

    未经测试

    find "/xyz" "/abc" "/abc" -printf '%P\n' | sort | uniq -u | xargs rm
    

    【讨论】:

    • 就在我的问题更正后找到 "/xyz" "/abc" "/xyz" -printf '%P\n' |排序 |独特的-u | xargs rm
    • 再问一个问题,如果我不想删除文件,而是移动到其他文件夹怎么办?
    • 你可以在xargs之后构建任何你想要的命令。您需要阅读手册以了解如何在更复杂的命令中使用它。 linux.die.net/man/1/xargs
    【解决方案2】:

    查找234和123目录中的每个文件,通过-printf获取文件名,排序,uniq -d给出重复列表,通过sed返回路径,使用123目录删除重复,并将文件传递给xargs rm

    命令:

    find ./234 ./123 -type f -printf '%P\n' | sort | uniq -d | sed 's/^/.\/123\//g' | xargs rm
    

    如果您在 ./123 目录中并且在 find 中使用文件夹的完整路径,则不需要 sed。

    【讨论】:

      【解决方案3】:

      另一种方法:只需找到 abc 中的文件并尝试从 xyz 中删除它们:

      未经测试

      find /abc -type f -printf 'rm -f /xyz/%P' | sh
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-16
        • 2019-07-02
        • 1970-01-01
        • 2012-04-01
        • 2019-08-28
        • 2022-06-11
        • 1970-01-01
        相关资源
        最近更新 更多