Which one is more efficient over a very large set of files and should be used?
find . -exec cmd {} +
or
find . | xargs cmd
(Assume that there are no funny characters in the filenames)
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Speed difference will be insignificant.
But you have to make sure that:
Your script will not assume that no
file will have space, tab, etc in
file name; the first version is
safe, the second is not.
Your script will not treat a file starting with “
-” as an option.So your code should look like this:
or
The first version is shorter and easier to write as you can ignore 1, but
the second version is more portable and safe, as “
-exec cmd {} +” is a relatively new option in GNU findutils (since 2005, lots of running systems will not have it yet) and it was buggy recently. Also lots of people do not know this “-exec cmd {} +“, as you can see from other answers.