On Tuesday 9 June 2009, 16:36, Neil Bothwick wrote: > On Tue, 09 Jun 2009 16:15:21 +0200, Joerg Schilling wrote: > > > find -H /usr/lib /lib -type f | xargs -d'\n' qfile --orphans > > > > No, this is definitely wrong: the right way to handle this is > > execplus (since 19 years). > > If it's been around 19 years, why doesn't Google know anything about > it? What is it?
Well, google does not know everything :) Basically, using + instead of ; after -exec allows to run the specified command less times, each time with the highest possible number of arguments (instead of running it once per file, which is what happens with ;). And yes, that's been in POSIX for a long time now. Example: $ ls file1 file2 file3 file4 file5 $ find . -type f -exec sh -c 'echo "number of arguments: $#"' sh {} \; number of arguments: 1 number of arguments: 1 number of arguments: 1 number of arguments: 1 number of arguments: 1 $ find . -type f -exec sh -c 'echo "number of arguments: $#"' sh {} + number of arguments: 5 So when you have to run a command on a very big number of files, say 1000 or more, with ; you spawn 1000 processes, with + you span just one or two (well, depending on the maximum command line length on the system anyway). This is of course much less resource intensive. Basically, using -exec with + does what xargs does, but without the need to care for strange characters in file names (well, a bit simplified, but you get the idea).