在包含 4000 个文件的目录中执行 `rm -rf *` 时出现“参数列表太长”错误

在包含 4000 个文件的目录中执行 `rm -rf *` 时出现“参数列表太长”错误

我以为这个问题在 10 年前就已经在 Linux 中修复了。4000 个文件似乎并不算太​​多,应该可以毫无问题地删除。所以这个问题显然存在于 OS X 中 - 可能不存在于 Ubuntu 中。我正在 OS X 上开发并部署到 Ubuntu

在这两种环境中是否有系统级解决方法?我真的不想为这么少的文件考虑这个问题?这个问题在 Linux 中仍然存在,特别是 Ubuntu 中?

答案1

这不是一个问题,而是一个限制。你可以使用如下方法:

find ./ -exec rm -rf {} \;

或者说,不使用能够完成这项工作的替代方案有什么问题吗?

答案2

我所知道的所有 Unix 和 Windows 上都存在这个问题。这实际上是对命令行上传递的字节数的限制,而不是文件数或其他什么的限制。

尝试getconf ARG_MAX查看你的 Unix 的限制(以字节为单位)。你可以使用命令xargs来解决此类问题。

答案3

虽然我不能代表其他 *nix 发言,但据我所知,这个“问题”在 Mac OS X 中一直存在。

ARG_MAX 定义如下/usr/include/sys/syslimits.h

#define ARG_MAX   (256 * 1024)  /* max bytes for an exec function */

sysctl kern.argmax返回:

kern.argmax: 262144

(这是在 Mac OS X 10.7.3 中;许多此类限制在 OS X 的生命周期中已经逐渐增加)。

相关内容