--copy-unsafe-links does not work for "double" symlinks

Roland Koebler r.koebler at yahoo.de
Mon Oct 5 17:47:39 MDT 2009


Hi,

as documented, if you use rsync with --copy-unsafe-links, and copy a
directory with a symlink pointing outside of the copied tree, the
referent of the symlink is copied.

Now, assume that the directory contains a symlink, which points to a
(2nd) directory outside of the copied tree.
If this (2nd) directory contains another symlink, which also points outside
of the copied tree, rsync unfortunately only copies this symlink and *not*
the referent.

I don't know if this is a rsync-problem or a symlink-problem.

(rsync  version 3.0.3  protocol version 30, on Debian Lenny)


Example:

- host 1 directory-structure ("empty"):
    drwx------ ./1

- host 2 directory-structure:
    drwx------ ./2
    -rw------- ./2/file
    lrwxrwxrwx ./2/dir -> ../foo
    drwx------ ./foo
    -rw------- ./foo/foofile
    lrwxrwxrwx ./foo/bar -> ../bar
    drwx------ ./bar
    -rw------- ./bar/barfile

- mirror host 2 to host 1:
    $ rsync -av --copy-unsafe-links 2/ 1/
    sending incremental file list
    ./
    file
    dir/
    dir/bar -> ../bar/
    dir/foofile

    sent 206 bytes  received 60 bytes  532.00 bytes/sec
    total size is 7  speedup is 0.03

Now, host 1 contains:
    drwx------ ./1
    -rw------- ./1/file
    drwx------ ./1/dir
    -rw------- ./1/dir/foofile
    lrwxrwxrws ./1/dir/bar -> ../bar
"file", "dir" and "foofile" are ok; but "bar" is a dangling symlink, and
"barfile" was not copied.

I would have expected that host 1 would contain:
    drwx------ ./1
    -rw------- ./1/file
    drwx------ ./1/dir
    -rw------- ./1/dir/foofile
    drwx------ ./1/dir/bar/
    -rw------- ./1/dir/bar/barfile
But this is not the case.

Is this a bug, or did I miss something?


thanks,
Roland



More information about the rsync mailing list