rsync all directories that start with a specific digit
What you proposed should actually work:
rsync -rzvvhP remotehost:/home/tmp/1\* /home/tmp/
(You can get away with not quoting the *
in most circumstances, as the pattern remotehost:/home/tmp/1\*
is unlikely to match any file so it will be left alone with most shell setups.)
Your attempt with --exclude='*'
failed because the first match applies, and your first match for everything (*
) says to exclude.
See this guide for some general principles about rsync filters. Here, to include only directories beginning with 1
at the toplevel, and copy everything in included subdirectories, include /1
then exclude /*
.
rsync -rzvvhP --include='/1' --exclude='/*' remotehost:/home/tmp/ /home/tmp/
Related videos on Youtube
rakzat
Updated on September 18, 2022Comments
-
rakzat over 1 year
I have directory loaded with thousands of sub directories:
/home/tmp/ 1 12 123 1234 2345 234 3456 345 34
Each subdirectory in turn has hundreds of subdirectories that I want to rsync if the first level subdirectory matches...
What I need is a way to copy/rsync only the directories that start with a given digit [1-9]...
What I think I want is basically something that would allow me to use wild cards to match
rsync -rzvvhP remotehost:/home/tmp/1* /home/tmp/
I want rsync to sync up the
/home/tmp/1/ /home/tmp/12/ /home/tmp/123/ /home/tmp/1234/
directories and any child subdirectories they have but not any of the first level directories that start with a different digit...
/home/tmp/234/ /home/tmp/2345/ ........./3*/ ........./4*/ etc..
What I've tried:
rsync -rzvvhP --exclude='*' --include-from=1.txt remotehost:/home/tmp/ /home/tmp/
where 1.txt contains:
1 12 123 1234
When I do this with 2.txt though rsync still seems to run through all the directories that start with 1 and 3 etc...
How can I do this so that I can have one command to rsync only the directories that start with any given digit?
-
user over 11 yearsI don't know if that's your problem, but you may want to protect the asterisk from local shell expansion (before it even gets to rsync).
'remotehost:/home/tmp/1*'
rather than without the single quotes. -
Gilles 'SO- stop being evil' over 11 yearsWhat is wrong with
rsync -rzvvhP remotehost:/home/tmp/1* /home/tmp/
?
-
-
rakzat over 11 years
rsync -rzvvhP --size-only --filter="+ /4*/" --exclude='/*'
... is what I ended up using...the issue I believe the problem was that the exclude was coming first...changing this from an include to filter works.