我需要将一堆文件“安装”到另一个目录,以保持源文件的目录结构完整。例如,如果我./foo/bar/baz.txt
要去,/var/www/localhost/webroot/
我希望结果是/var/www/localhost/webroot/foo/bar/baz.txt
。rsync
在中具有此功能--relative
,但是当我这样做时,我发现它对符号链接并不友好:
$ ls -ald /var/www/localhost/webroot/ | grep ^l
lrwxrwxrwx 1 www-data www-data 15 2014-01-03 13:45 media -> ../static/media
lrwxrwxrwx 1 root root 13 2014-02-24 13:47 var -> ../static/var
$ rsync -qrR . /var/www/localhost/webroot/
$ ls -ald /var/www/localhost/webroot/ | grep var
drwxr-xr-x 3 root root 4096 2014-02-24 13:52 /var/www/localhost/webroot/var
因此,您会看到符号链接不再是符号链接–文件被复制到错误的位置!
rsync
也可以--no-implied-dirs
选择,从表面上看似乎可以满足我的要求,但是它仅在不执行递归rsync 时才可以按我的意图工作,所以我必须:
find . -type f -print0 | xargs -0I{} rsync -R --no-implied-dirs {} /var/www/localhost/webroot/
有没有更直接的方法来完成文件的镜像而不清除中间的符号链接目录(带有或不带有rsync)?