Kevin Korb
2026-Jan-30 13:56 UTC
Copying one directory tree to another but exclude all top-level files
It sounds like you want: --include='/*' --exclude='/*/' but I am having a bit of trouble understanding your goal.? You are right though that an exclude of * means exclude everything. BTW, a second -v enables include/exclude debugging. On 2026-01-30 08:23, Brian J. Murrell via rsync wrote:> Hi. > > I want to do this: > > # rsync -aSPAHX --exclude \* --link-dest=/.snapshots/daily.10/ ../daily.10/ . > > so that any *files* in the /.snapshots/daily.10/ directory (but not any > directories in /.snapshots/daily.10/ and directories and files below > that) are excluded? > > Using the above syntax, nothing gets copied I suppose because * matches > all of the top-level directories in /.snapshots/daily.10/ also. > > Cheers, > b. >
Brian J. Murrell
2026-Jan-30 14:42 UTC
Copying one directory tree to another but exclude all top-level files
On Fri, 2026-01-30 at 08:56 -0500, Kevin Korb via rsync wrote:> It sounds like you want: --include='/*' --exclude='/*/'No. That doesn't work either.> but I am having > a bit of trouble understanding your goal.Unfortunately I'm not sure how to make it any more clear than I did already. I want to copy a directory tree to another location but not copy any **files** at the top of the tree. Using `--exclude-from <(find . -maxdepth 1 -type f -printf "%P\n")` instead of `--exclude *` achieves the goal (so maybe that is more illustrative of my goal), but I was hoping to achieve the goal without having to involve an external process. I.e. with just --include/-- exclude switches.> You are right though that an > exclude of * means exclude everything.Indeed.> BTW, a second -v enables include/exclude debugging.Thanks. Cheers, b.