Bash:查找和删除不同文件夹中的重复文件

时间:2017-05-17 06:19:00

标签: bash shell unix

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

的folder1:

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

folder2:

/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

3 个答案:

答案 0 :(得分:2)

-execfind的一个选项,当您启动管道时,您已经退出命令find

尝试使用xargs,它会从stdin获取所有数据并附加到程序中。

UNTESTED

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

答案 1 :(得分:0)

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

命令:

find ./234 ./123 -type f -printf '%P\n' | sort | uniq -d | sed 's/^/.\/123\//g' | xargs rm
如果您在./123目录中并且在查找中使用文件夹的完整路径,则不需要

答案 2 :(得分:0)

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

UNTESTED

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