在包含许多文件的文件夹中如何对许多文件执行 rm

在包含许多文件的文件夹中如何对许多文件执行 rm

我只是在 Linux 中进行了一些实验,最终在同一个文件夹中得到了很多文件。现在当我尝试做的时候

rm -f 文件夹/*.png

我明白了

-bash: /bin/rm: 参数列表太长

有没有一些简单的方法可以克服这个问题?


自己的工作:

我想我可以制作一个丑陋的脚本,它在 rm 的结果上循环

ls /文件夹/ |头-100 | grep ".*\.png"

但真的,必须有一种更简单的 Gnu 方法来做到这一点吗?

答案1

我会做类似的事情:

ls -1 | grep "\.png$" | xargs -L 50 rm -f 

这将仅匹配(并删除)以.png.

答案2

当您使用rm -f folder/*.png或什至更简单rm *时,shell(不是 rm)会将 * 扩展到所有相关文件。然后它将调用 rm 并扩展所有文件名。 (例如,如果将执行“rm filename1 filename2 filename3 filename4 filename5 filename6 filename7 .... filename12345”

如果该列表太长而无法通过,您将收到此错误。

解决方案:将其分割成更小的块,或者不使用外壳。例如,使用 --delete 查找是一个不错的选择。

  • find /path/to/file -name "*.PNG" -delete \;
  • find /path/to/file -name "*.PNG" -exec rm \;(为每个文件运行 rm 一次)
  • find /path/to/file -name "*.PNG" -delete + (将它们分成足够小的块以传递给 rm)

第一个选项是我经常使用的。首先使用 -print 进行测试。

相关内容