linux - 文件命令 108k 文件 : Too Many Args

标签 linux file find ksh

我有一个包含 108k 个文件的目录。 我在 RHEL5 上使用 KSH shell

ls *
-dash_bin_ksh: ls: /bin/ls: cannot execute [Argument list too long]

唯一似乎有效的命令是 find 命令。

find .
file 1
file 2 
file n

我尝试使用带有 then exec 选项的 find 来运行文件命令,但我没有得到任何结果。

find . -exec file {}
find: missing argument to `-exec'

我错过了什么?我只想对该目录中的每个文件运行文件命令并输出到 file_output.txt

最佳答案

对于 find 的 exec,你必须以 with \;

结束参数

你也可以试试:

find . -print0 | xargs -0 file

xargs 的工作原理是获取其 STDIN 并将每个元素(行或分隔字符串)作为给定可执行文件的参数添加到尽可能少的执行次数。参数列表被 --max-chars(平台依赖最多 128Kib)拆分成组执行。

-print0 添加空字符而不是新行,这使得带有空格的文件名是安全的。 xargs 上的 -0 用于识别空字符。

-print0-0 是 GNU 扩展,可以在非 GNU 环境中以通用性为代价被删除。

xargs 还具有 -I 选项,这使其更像 find -exec,其中为每个元素运行可执行文件。

感谢@glennjackman 对这个主题的深入了解。

关于linux - 文件命令 108k 文件 : Too Many Args,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13574868/

相关文章:

C++ UUID 存储为整数

linux - 如何在 Vim 中的行首和行尾添加/*?

Java:从目录中获取新文件列表

java - 读取巨大文件中的行组

python - IO错误: [Errno 13] Permission denied: I do have permissions?

linux - 命令在脚本中不起作用

linux - 复制 screenlog.n 文件并重新启动日志?

linux - xargs sh -c 跳过第一个参数

bash: 查找 -exec 和文件名

bash - 查找和删除文件夹(ubuntu 服务器)