我有一个包含 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/