Read the "PER-DIRECTORY RULES AND DELETE" of the man page. (And don't feel bad, it took me a while to figure it out myself). Short version: per-directory rules only apply on the side they're *specified on*, but you need the exclusion to apply to *both* sides. The following works, for the reasons specified there: rlpowell at stodi> find a b -ls 703572129 0 drwxr-xr-x 2 rlpowell rlpowell 39 Mar 6 22:06 a 704372871 0 -rw-r--r-- 1 rlpowell rlpowell 0 Mar 6 21:56 a/file 704372873 4 -rw-r--r-- 1 rlpowell rlpowell 20 Mar 6 22:06 a/.rsync-filter 703572158 0 drwxr-xr-x 2 rlpowell rlpowell 39 Mar 6 22:06 b 704372870 0 -rw-r--r-- 1 rlpowell rlpowell 0 Mar 6 22:06 b/file 704372881 4 -rw-r--r-- 1 rlpowell rlpowell 20 Mar 6 22:06 b/.rsync-filter rlpowell at stodi> cat a/.rsync-filter + .rsync-filter - * rlpowell at stodi> rsync -F --delete-after -iav a/ b/ building file list ... done sent 102 bytes received 11 bytes 226.00 bytes/sec total size is 20 speedup is 0.18 rlpowell at stodi> On Mon, Mar 06, 2023 at 10:04:52PM +0100, Heiko Schlittermann via rsync wrote:> Hello, > > given are 2 directories: > > a > ??? a-file > ??? .rsync-filter > > b > ??? a-file > > I'd like to sync a/ -> b/, but I'd like to *exclude* all files. But I do > not want to delete the excluded files. (The real scenario is a way more > complex, the above is my reproducer.) > > and the following rsync command: `rsync -F --del a/ b/` > Note, there is *no* `--delete-excluded`: > > $ rsync -F --del -inav a/ b/ > sending incremental file list > *deleting a-file > .d..t...... ./ > > sent 62 bytes received 29 bytes 182.00 bytes/sec > total size is 0 speedup is 0.00 (DRY RUN) > > Why? Because it is excluded? Using the `--exclude` option does what I > expect: > > $ rsync --exclude 'a-file' --del -inav a/ b/ > sending incremental file list > .d..t...... ./ > >f+++++++++ .rsync-filter > > sent 92 bytes received 22 bytes 228.00 bytes/sec > total size is 4 speedup is 0.04 (DRY RUN) > > even does what I expect: > > $ rsync --filter '- *' --del -inav a/ b/ > sending incremental file list > .d..t...... ./ > > sent 58 bytes received 19 bytes 154.00 bytes/sec > total size is 0 speedup is 0.00 (DRY RUN) > > Version: > rsync version 3.2.3 protocol version 31 > > Best regards from Dresden/Germany > Viele Gr??e aus Dresden > Heiko Schlittermann > -- > SCHLITTERMANN.de ---------------------------- internet & unix support - > Heiko Schlittermann, Dipl.-Ing. (TU) - {fon,fax}: +49.351.802998{1,3} - > gnupg encrypted messages are welcome --------------- key ID: F69376CE -> -- > Please use reply-all for most replies to avoid omitting the mailing list. > To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/rsync > Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html
Heiko Schlittermann
2023-Mar-07 12:16 UTC
prevent filter excluded files from being deleted
Robin Lee Powell via rsync <rsync at lists.samba.org> (Di 07 M?r 2023 07:07:01 CET):> Read the "PER-DIRECTORY RULES AND DELETE" of the man page. (And > don't feel bad, it took me a while to figure it out myself).I did, but left with some uncertainty. "H" hides the files from the transfer? What does it mean? "P" protects files from being deleted? I even tried '+r *', no luck.> Short version: per-directory rules only apply on the side they're > *specified on*, but you need the exclusion to apply to *both* sides.Hm. Maybe more reasoning behind. I'm syncing a quite large tree, but some directories contain huuge VM images, which I need to transfer using another mechanism. Because rsync doesn't seem to handle filesizes of about 100?500GiB well. These directories should contain a `.rsync-filter` to prevent them from the sync, but rsync should not remove these same-named files on the remote side. -- Heiko -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 488 bytes Desc: not available URL: <http://lists.samba.org/pipermail/rsync/attachments/20230307/dce0caec/signature.sig>