删除垃圾箱中的文件时参数列表太长

删除垃圾箱中的文件时参数列表太长

我有大约 1,000,000 张 png 图像需要从垃圾箱中删除。我尝试过:

  1. rm -rf /home/ahmed/.local/share/Trash/*

  2. 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

相关内容