0

我有一个目录,里面有 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

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

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

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

4

2 回答 2

6

对于 find 的 exec,你必须用 with 结束参数\;

你也可以试试:

find . -print0 | xargs -0 file

xargs 的工作原理是将其 STDIN 并将每个元素(行或分隔字符串)作为参数添加到给定的可执行文件中,以尽可能少地执行。参数列表由 --max-chars(取决于平台,最大 128Kib)分成组以供执行。

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

-print0并且-0是 GNU 扩展,可以在非 GNU 环境中放弃,但以牺牲多功能性为代价。

xargs 还有一个-I选项,使它更像find -exec是为每个元素运行可执行文件的位置。

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

于 2012-11-26T23:32:32.253 回答
1

\;在命令末尾添加 a ,例如find . -exec file {} \;

于 2012-11-26T23:33:07.737 回答