I use rsync a lot. And I use find a lot. You can use them both together, by using the magnificent xargs command. Two problems are there to solve: xargs usually just pastes the arguments from find at the end of the specified command. No way to specify the destination directory. Second, file names with spaces are a problem.
The solutions are:
- The -print0 option of find uses 0-bytes to separate results, instead of spaces and newlines
- The -0 option of xargs tells xargs to look for said 0-bytes
- The -J option of xargs allows us to tell xargs where to put the file names that we feed to it.
So let’s put it together:
pi@raspberrypi ~ $ find . -name ‘your*pattern.jpg’ -print0 | xargs -J % -0 rsync -aP % user@host:some/dir/
Thanks to redeyeblind for the insightful blog post.