소스 파일의 디렉토리 구조를 그대로 유지하면서 다른 디렉토리에 많은 파일을 "설치"해야합니다. 예를 들어, 내가 한 경우 ./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가 있거나없는 중간 symlink 디렉토리를 지우지 않고이 파일 미러링을 수행하는 더 직접적인 방법이 있습니까?