--include vs. --exclude

Phil Howard phil-rsync-2 at ipal.net
Sat Mar 27 03:21:32 GMT 2004


It guess I still haven't figured out the entire sematics of the --include
and --exclude options.  From reading the man page, it seems to say that
what happens is that each file being checked is tested against each pattern
in order, and when one matches the tests end, and whether it is --include
or --exclude determines if that file is included or excluded.

So I have on my server a big file tree.  I want to use rsync to download
only the PDF files, which make up a small portion of that tree.  So I try
it this way:

  rsync -aHPvz --include '*.pdf' --exclude '**' user at host:<source> <destination>

which gives me nothing.  For reference, I try:

  rsync -aHPvz --include '*.pdf' user at host:<source> <destination>

which starts downloading other files.  That confirms that the default final
action is equivalent to --include '**' or something like that.

So it seems the include pattern isn't matching.  So I try variations:

  rsync -aHPvz --include '*.pdf' --exclude '*' user at host:<source> <destination>
  rsync -aHPvz --include '**.pdf' --exclude '**' user at host:<source> <destination>
  rsync -aHPvz --include '**.pdf' --exclude '*' user at host:<source> <destination>
  rsync -aHPvz --include '**/*.pdf' --exclude '**' user at host:<source> <destination>
  rsync -aHPvz --include '**/*.pdf' --exclude '*' user at host:<source> <destination>
  rsync -aHPvz --include '/**.pdf' --exclude '**' user at host:<source> <destination>
  rsync -aHPvz --include '/**.pdf' --exclude '*' user at host:<source> <destination>
  rsync -aHPvz --include '/**/*.pdf' --exclude '**' user at host:<source> <destination>
  rsync -aHPvz --include '/**/*.pdf' --exclude '*' user at host:<source> <destination>

None of these work.

So finally, I replicate the file tree on the server with:

  cp -al <source> <alternatename>

And proceed to remove all non-PDF files:

  find <alternatename> -type f ! -name '*.pdf' -exec rm -f {} ';'

Then I do:

  rsync -aHPvz --include '*.pdf' --exclude '**' user at host:<alternatename> <destination>

which now works.

Can rsync do this by itself?  Is there a way to tell rsync "only download
this particular extension"?  How SHOULD I have done this?

I generally understand things best by knowing what sequence of steps is
performed.  I thought I understood this for rsync based on what the man
page said.  I guess one of us is wrong.

I'm running:  rsync  version 2.6.0  protocol version 27

-- 
-----------------------------------------------------------------------------
| Phil Howard KA9WGN       | http://linuxhomepage.com/      http://ham.org/ |
| (first name) at ipal.net | http://phil.ipal.org/   http://ka9wgn.ham.org/ |
-----------------------------------------------------------------------------


More information about the rsync mailing list