查找和删除重复文件(md5sum)

时间:2018-03-04 22:54:18

标签: linux cygwin

我有多个包含多个图像的目录,其中一些目录有重复的图像。我想在同一目录中找到所有重复的图像并删除它们。以下是我的代码。

我在删除重复图片时遇到问题。代码可以识别重复的文件,但是当它尝试删除它时会显示此消息" rm:无法删除' FILENAME':没有这样的文件或目录"

for dir in *; do
count=1
for file in $dir/*.*; do
     md5sum * | sort | awk 'BEGIN{lasthash = ""} $1 == lasthash {print $2} {lasthash = $1}' | xargs rm
     let count=count+1
done
done

1 个答案:

答案 0 :(得分:0)

以下摘自xargs联机帮助页可能会解释您所看到的内容:

find /tmp -name core -type f -print | xargs /bin/rm -f
     

在目录/ tmp中或下面找到名为core的文件并删除它们。请注意,如果有任何包含换行符或空格的文件名,则将无效。

 find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
     

在目录/ tmp中或下面找到名为core的文件并删除它们,以正确处理包含空格或换行符的文件或目录名称的方式处理文件名。

如果某个文件的名称带有空格,请说my vacation in thai.jpgxargs默认情况下将其拆分为空格并调用多个rm

rm my
rm vacation
rm in
rm thai.jpg

您需要使awk打印以null结尾的字符串,并使用xargs -0来使用它们。在这个问题中:How can I output null-terminated strings in Awk?建议使用这一行:

  awk '{printf "%s\0", $0}'