我有一个目录,里面有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
答案 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 {} \;