How can I exclude all subdirectories but include files of a directory in rsync?
Try this command:
rsync -a -f"- */" -f"+ *" /home/user/ destination/
man rsync
-f, --filter=RULE add a file-filtering RULE
The rule to include all files*
and exclude the dirs */
Another approach to use the regular copy cp
cp /home/usr/* /destination
you can get rid of the errors about dirs using redirection
cp /home/usr/* /destination 2>/dev/null
This will only copies the files inside your home without the directories
If you want to solve this with --include
and --exclude
parameters, you should change the order of them: first exclude what you want, then include everything.
I do it usually with this command:
rsync -vazhP path/to/source path/to/dest --exclude '*/*/' --include '*'
By default, rsync
does not copy directories. Perhaps you are using the -a
flag. If this is the case, notice that according to the man page, -a
is equivalent to -rlptgoD
, so if you don't want to recurse, just use -lptgoD
.