我只是在 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 进行测试。