Kaynak dosyaların dizin yapısını koruyarak bir demet dosyayı başka bir dizine "kurmam" gerekiyor. Örneğin, eğer ./foo/bar/baz.txt
gideceksem /var/www/localhost/webroot/
sonucun olmasını istiyorum /var/www/localhost/webroot/foo/bar/baz.txt
. rsync
bu yeteneğe sahip --relative
, ancak bunu yaptığımda, sembolik bağlara kolay olmadığını keşfettim:
$ 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
Yani, görüyorsunuz, artık bir sembolik link değildir - dosyalar yanlış yere kopyalanmıştır!
rsync
Ayrıca sahip --no-implied-dirs
yüzeysel İstediğimi yapmak gibi görünüyor seçeneği, ama ne zaman niyetinde olarak sadece çalışır değil bir özyinelemeli rsync'i yapıyor ben zorunda:
find . -type f -print0 | xargs -0I{} rsync -R --no-implied-dirs {} /var/www/localhost/webroot/
Bu ara yansıtma dizinlerini silmeden (rsync olan veya olmayan) dosyaların yansıtılmasını sağlamanın daha doğrudan bir yolu var mı?