文件命令108k文件:太多Args

时间:2012-11-26 23:19:23

标签: 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

我尝试使用find with then exec选项来运行文件命令,但我没有到达任何地方。

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

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

2 个答案:

答案 0 :(得分:6)

对于find的exec,您必须使用\;

结束参数

您也可以尝试:

find . -print0 | xargs -0 file

xargs通过获取其STDIN并将每个元素(行或分隔的字符串)作为参数添加到给定的可执行文件中,以尽可能少地执行。参数列表由--max-chars(平台依赖高达128Kib)拆分成组以供执行。

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

-print0-0是GNU扩展,可以在非GNU环境中删除,但代价是多功能性。

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

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

答案 1 :(得分:1)

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