--keep-dirlinks --delete erroneously deletes symlinks to directories

Matt McCutchen matt at mattmccutchen.net
Mon Oct 5 00:27:59 MDT 2009


On Sat, 2009-10-03 at 12:59 +0200, Roland Koebler wrote:
> the combination of --keep-dirlinks and --delete (--delete-during,
> --delete-delay) erroneously deletes symlinks to directories on
> the receiver.
> With --delete-before and --delete-after it works as expected.
> 
> (rsync  version 3.0.3  protocol version, on Debian Lenny)
> 
> I don't think that this behaviour is intended.
> 
> 
> Details/example:
> 
> - Host 1 directory-structure:
>     drwx------ ./1
>     -rwx------ ./1/file
>     drwx------ ./1/dir
>     -rwx------ ./1/dir/subfile
> 
> - Host 2 directory-structure:
>     drwx------ ./2
>     -rwx------ ./2/file
>     lrwxrwxrwx ./2/dir -> ../foo
>     drwx------ ./foo
>     -rwx------ ./foo/subfile
> 
> - the data on both hosts is the same, so rsync shouldn't do anything
> - mirroring Host 1 -> Host 2 correctly does nothing:
>     $ rsync -av --keep-dirlinks 1/ 2/
>     sending incremental file list
> 
>     sent 94 bytes  received 13 bytes  214.00 bytes/sec
>     total size is 0  speedup is 0.00
> 
> - mirroring Host 2 -> Host 1 correctly does nothing:
>     $ rsync -av --copy-dirlinks 2/ 1/
>     sending incremental file list
> 
>     sent 94 bytes  received 13 bytes  214.00 bytes/sec
>     total size is 0  speedup is 0.00
> 
> - --delete-after works correctly, and does nothing:
>     $ rsync -av --keep-dirlinks --delete-after 1/ 2/
>     building file list ... done
> 
>     sent 89 bytes  received 12 bytes  202.00 bytes/sec
>     total size is 0  speedup is 0.00
> 
> - --delete-before works correctly, and does nothing:
>     $ rsync -av --keep-dirlinks --delete-before 1/ 2/
>     building file list ... done
> 
>     sent 89 bytes  received 12 bytes  202.00 bytes/sec
>     total size is 0  speedup is 0.00
> 
> - but --delete (or --delete-during / --delete-delay) erroneously deltes the
>   "dir -> ../foo"-symlink (and copies the data afterwards):
>     $ rsync -av --keep-dirlinks --delete 1/ 2/
>     sending incremental file list
>     deleting dir
>     dir/
>     dir/subfile
> 
>     sent 136 bytes  received 35 bytes  342.00 bytes/sec
>     total size is 0  speedup is 0.00
> 
> Is this a bug, or did I miss something?

It looks like a bug.  I can reproduce it with rsync 3.0.3 but not with
3.0.6.  Please upgrade.

-- 
Matt



More information about the rsync mailing list