dog*_*ane 111 unix linux command-line find
哪一个对于一大堆文件更有效并应该使用?
find . -exec cmd {} +
Run Code Online (Sandbox Code Playgroud)
要么
find . | xargs cmd
Run Code Online (Sandbox Code Playgroud)
(假设文件名中没有有趣的字符)
Tom*_*zky 103
速度差异无关紧要.
但你必须确保:
您的脚本不会假定文件名中没有文件的空格,标签等; 第一个版本是安全的,第二个版本不是.
您的脚本不会将以" -" 开头的文件视为选项.
所以你的代码应该是这样的:
find . -exec cmd -option1 -option2 -- {} +
Run Code Online (Sandbox Code Playgroud)
要么
find . -print0 | xargs -0 cmd -option1 -option2 --
Run Code Online (Sandbox Code Playgroud)
第一个版本更短,更容易编写,因为你可以忽略1,但第二个版本更便携和安全,因为" -exec cmd {} +"是GNU findutils中相对较新的选项(自2005年以来,许多正在运行的系统还没有它)最近这辆车很快.-exec cmd {} +从其他答案可以看出,很多人都不知道这个" ".
find . | xargs cmd
Run Code Online (Sandbox Code Playgroud)
效率更高(它运行的cmd次数尽可能少,不像每次匹配exec运行cmd一次).但是,如果文件名包含空格或时髦字符,则会遇到麻烦.
建议使用以下内容:
find . -print0 | xargs -0 cmd
Run Code Online (Sandbox Code Playgroud)
这将工作,即使文件名包含时髦的字符(-print0使find打印NUL终止匹配,-0使得xargs期望这种格式.)