我有多个包含多个图像的目录,其中一些目录有重复的图像。我想在同一目录中找到所有重复的图像并删除它们。以下是我的代码。
我在删除重复图片时遇到问题。代码可以识别重复的文件,但是当它尝试删除它时会显示此消息" 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
答案 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.jpg
,xargs
默认情况下将其拆分为空格并调用多个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}'