

The power of find and xargs - rbxbx
http://danielmiessler.com/study/find/

======
tange
xargs cannot replace {} with a lot of arguments, so if mv did not have
--target-directory, then xargs would have to do:

    
    
       find ... | xargs -0 -i {} mv {} ~/Pictures
    

which would run one mv per file.

GNU Parallel <http://www.gnu.org/software/parallel/> allows for replacing {}
with multiple arguments. So this would do the right thing:

    
    
       find ... | parallel -X -0 mv {} ~/Pictures
    

GNU Parallel is useful for many other applications. Watch the intro video to
learn more: <http://www.youtube.com/watch?v=OpaiGYxkSuQ>

------
alextingle
The examples are somewhat forced:

    
    
        find ~/Desktop -name "*.jpg" -o -name "*.gif" -o -name "*.png" \
        -print0 | xargs -0 mv --target-directory ~/Pictures
    

What's wrong with this?...

    
    
        mv ~/Desktop/**/*.{jpg,gif,png} ~/Pictures

~~~
michaelcampbell
Indeed. With zsh (and I guess more recent bash's), a lot of find is no longer
necessary.

The real nugget in there is using xargs _AT ALL_. A lot of people don't know
about it and continue with the -exec option of find. Which works fine still,
but is horribly inefficient. Although to be fair, I haven't found this
inefficiency to be even measurable (in real time-wasted units) unless the
process being exec'd is slow to start.

