我有以下场景,我需要复制目录,有时可以是链接,有时可以是同名目录。例如,假设这是初始设置:
来源:/workspace/test/source/dir1 -> /tmp/test1
目的地:/workspace/test/dest/dir1 -> /tmp/test1
现在,假设我删除源中的链接并创建一个同名的文件夹,所以现在它看起来像这样:
来源:/workspace/test/source/dir1
目的地:/workspace/test/dest/dir1 -> /tmp/test1
我现在想做的是使用 rsync 复制实际文件夹并“覆盖”链接,因此它看起来像:
来源:/workspace/test/source/dir1
目的地:/workspace/test/dest/dir1
有什么办法可以通过rsync来做到这一点吗?我知道如果我使用上面一级的 rsync,即 /workspace/test/source,它将起作用。不幸的是,我必须使用最低级别的 rsync。
感谢您的回复。
答案1
这是 的默认行为rsync
。
例子
## Preamble
$ cd /tmp
$ mkdir src dst stuff
$ touch stuff/{a,b,c}
$ ( cd src && ln -s /tmp/stuff dir1 )
$ ( cd dst && ln -s /tmp/stuff dir1 )
## Symlinks are retained
$ cd /tmp
$ rsync -avv src/ dst/
## Change scenario
$ ls -l src
$ rm src/dir1 && cp -a /tmp/stuff src/dir1
## Symlinks are replaced according to the source
$ cd /tmp
$ rsync -avv src/ dst/
$ ls -l dst