删除两个目录之间的所有相同文件

时间:2015-08-12 13:36:43

标签: linux shell diff

我使用以下命令删除2个目录之间的所有相同文件。

diff -rs dir1/ dir2/ | egrep '^Files .+ and .+ are identical$' | sed -e 's/Files/rm -rf /g' -e 's/and //g' -e 's/ are identical//g' | source /dev/stdin

还有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

如果文件中没有空格,以下代码可以使用:

diff -rs folder1 folder2|grep "are identical$"|awk '{ print $2 " " $4 }'|xargs rm

如果您有太多文件并且rm上出现错误(参数太多):

 for i in $(diff -rs neustar neustar2|grep "are identical$"|awk '{ print $2 " " $4 }');do
    rm $i
 done

答案 1 :(得分:0)

如果你从目录中运行以下命令,你想要删除文件就可以了。

find /tmp/dir1 -name "*" -exec basename {} \; | xargs rm 2>/dev/null

只有在您不希望从不重复的文件中看到错误消息时才需要最后一个参数。如果您正在查找文件名的目录的名称与您正在删除文件的目录中的文件名称相同,也会产生一些意想不到的后果。虽然这种情况极不可能,但您应该注意这一点。