我有大约 1,000,000 张 png 图像需要从垃圾箱中删除。我尝试过:
rm -rf /home/ahmed/.local/share/Trash/*
find . -name '*' | xargs rm -v
我得到了以下
bash: /usr/bin/find: Argument list too long
答案1
ARG_MAX
在列出/删除的过程中被触发。
你可以:
让
find
我们处理删除,它本质上处理ARG_MAX
:find /home/ahmed/.local/share/Trash/ -type f -iname '*.png' -delete
利用
for
构造,顺便说一下这很慢:for f in /home/ahmed/.local/share/Trash/*.[Pp][Nn][Gg]; do [[ -f $f ]] && rm "$f" done
答案2
shell 将通配符扩展*
为所有文件名,这超出了最大命令行长度。不过,在第二个示例中,这种情况不会发生,因为星号在引号中'*'
。
要删除整个目录,您也可以删除目录本身
rm -rf /home/ahmed/.local/share/Trash
请注意末尾缺少的通配符。
避免此类错误的另一种方法find
是使用-type f
。此选项选择所有常规文件,例如
find . -type f | xargs rm -v
但是如果有 1,000,000 个文件,我会避免使用此选项-v
。