find-exec cmd {} + vs | xargs的
哪一个更有效率超过一个非常大的一组文件,应该使用?
find . -exec cmd {} +
要么
find . | xargs cmd
(假设文件名中没有有趣的字符)
速度差异将是微不足道的。
但是你必须确保:
-
您的脚本不会假定文件名中没有空格,制表符等; 第一个版本是安全的,第二个版本是不安全的。
-
您的脚本不会将以“
-
”开头的文件视为选项。
所以你的代码应该是这样的:
find . -exec cmd -option1 -option2 -- {} +
要么
find . -print0 | xargs -0 cmd -option1 -option2 --
第一个版本更短,更容易编写,因为你可以忽略1,但是第二个版本更加便携和安全,因为“ -exec cmd {} +
”在GNU findutils中是一个相对较新的选项(自2005年以来,大量运行系统将不会有它), 最近它是越野车 。 也有很多人不知道这个“ -exec cmd {} +
”,你可以从其他答案中看到。
find . | xargs cmd
效率更高(它运行cmd
次数尽可能less,不像exec
,每次运行cmd
一次)。 但是,如果文件名包含空格或时髦字符,则会遇到麻烦。
build议使用以下内容:
find . -print0 | xargs -0 cmd
这将工作,即使文件名包含时髦的字符( -print0
使find
打印NUL终止匹配, -0
使xargs
期望这种格式。)