solution: Re: rsync takes way too long to perform this....

Martin Pool mbp at
Fri Nov 23 17:35:59 EST 2001

On 14 Nov 2001, Jason Helfman <jhelfman at> wrote:
> rsync -avnp remote::gif/ `find /home/www/html/ -maxdepth 1
> -name "*.[j,g][pg,if]*"` /tmp/

I can't see how this syntax will work.  The shell will expand this to:

  rsync -avnp remote::gif/ /home/www/html/foo.jpg /home/www/html/bar.gif (more filenames here) /tmp/

which I think from rsync's point of view means: copy all of
remote::gif/, plus a pile of local files, into /tmp/.  Is that really
what you want?

Secondly, when running from an rsync daemon (two-colon syntax) rsync
should never expand remote backtick substitutions, because we don't
want to allow weakly-authenticated remote users to run commands on the

Incidentally, your shell syntax is strange.  (Not a flame, just a
point of information. :-) Your wildcard means: "anything containing a
dot then any character from the set (j, comma, or g), then any
character from the set (p, g, comma, i or f)."  If you wanted all
images then it might be better to say

 find /home/www/html -maxdepth 1 '(' -name '*.jpg' -o -name '*.gif' ')'

Note also that -n means "don't copy anything, just list filenames".

What is that it you actually want to achieve?  If you want all image
files and directories to come back to /tmp/remoteimages, then try

  rsync -avp remote::gif/ --include '*.jpg' --include '*.gif' \
  --include '*/' --exclude '*' /tmp/remoteimages/

If you just want a list of them:

  rsync -avp remote::gif/ --include '*.jpg' --include '*.gif' \
  --include '*/' --exclude '*' 


More information about the rsync mailing list