I am attempting to copy only certain files down a directory tree. I know which files I want. I could generate a file of just those with 'find'. But having read the docs I have been trying to use the --include and --exclude patterns to have rsync pick the right files itself. But I can't figure it out. I am suspecting that I can't do what I want to do.
Source example, this is what I have, foos and bars are files: dir1/a1/foo dir1/a2/foo dir1/a3/bar dir1/bar dir2/a1/foo dir2/a2/foo dir2/a3/bar dir2/bar Destination example, this is what I want, just the foos: dir1/a1/foo dir2/a1/foo Here is how I am trying to do it. rsync -a --include '**/a1/foo' --exclude "*" . example.com:/tmp/ But that does not match any files. "0 files to consider" is the result. The man page has an example with --include "*/". rsync -a --include '*/' --include '**/a1/foo' --exclude "*" . example.com:/tmp/ That does too much and creates all of the directories even if there is no file "foo" in the directory. That is, in my example above all of the */a2 directories are also copied. Can anyone think of a way to do this? The actual source directories are relatively large with 20k total files or so in a deep hiearchy tree. So expanding them on the command line is not good since it will frequently exceed ARG_MAX. Conceptually something like the following would work if the directory was not too big and I could also line up the destination to match the source. rsync -a $(find . -name foo -print) example.com:/tmp/ # bad example for file in $(find . -name foo -print); do # another bad example dirname=$(dirname $file) rsync -a $file example.com:$dirname/ # 20k times seconds per ssh... done That is just very, very slow. I can almost use fsh but just the same it would be much cleaner to do this entirely within rsync. Thanks Bob -- To unsubscribe or change options: http://lists.samba.org/mailman/listinfo/rsync Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html