ソースファイルのディレクトリ構造を維持したまま、別のディレクトリに多数のファイルを「インストール」する必要があります。例えば、私がしている場合./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を使用して、または使用せずに)このファイルのミラーリングを実現する直接的な方法はありますか?