Votre commande ne fonctionnait pas parce que lorsque vous l'utilisiez /var/www/*
comme source, votre shell y effectuait une globalisation, c'est-à-dire que le shell se développait *
sur tous les fichiers de ce répertoire et copiait les fichiers un par un, donc ici les fichiers individuels sont devenus les sources plutôt que le répertoire parent.
Donc, si vous utilisez /var/www/*
, alors vous n'avez pas besoin d' --recursive
option car *
cela entraînera la copie des fichiers (avec tous les répertoires avec leur contenu), pas le répertoire parent qui contient les fichiers. En raison de la même raison --delete
ne fonctionne pas, comme --delete
supprimera les fichiers de destination répertoire qui ne sont pas dans la source répertoire , mais vous copiez des fichiers si ses fichiers (pas la suppression expectedly).
Cela vous rendra plus clair:
/foo$ ls -l
-rw-rw-r-- 1 user user 0 Apr 16 17:56 egg
-rw-rw-r-- 1 user user 0 Apr 16 17:56 spam
drwxrwxr-x 2 user user 4096 Apr 16 18:14 test
/bar$ ls -l
-rw-rw-r-- 1 user user 0 Apr 16 17:56 egg
-rw-rw-r-- 1 user user 0 Apr 16 18:13 lion
-rw-rw-r-- 1 user user 0 Apr 16 17:56 spam
$ rsync -avz --ignore-existing --recursive --delete
/foo/* /bar/
+ rsync -avz --ignore-existing --recursive --delete
/foo/egg /foo/spam /foo/test /bar/
sending incremental file list
test/
test/hello
sent 173 bytes received 39 bytes 424.00 bytes/sec
total size is 0 speedup is 0.00
/bar$ ls -l
-rw-rw-r-- 1 user user 0 Apr 16 17:56 egg
-rw-rw-r-- 1 user user 0 Apr 16 18:13 lion
-rw-rw-r-- 1 user user 0 Apr 16 17:56 spam
drwxrwxr-x 2 user user 4096 Apr 16 18:14 test
Comme vous pouvez le voir, j'ai utilisé la source car /foo/*
la rsync
commande en cours d'exécution est
rsync -avz --ignore-existing --recursive --delete /foo/egg
/foo/spam /foo/test /bar/
avec *
faire shell pour le développer et faire tous les fichiers individuellement comme arguments source, pas le répertoire parent dans son ensemble (et vous n'avez pas non plus besoin --recursive
dans ce cas).
Donc, si vous voulez faire du --delete
travail, exécutez-le en tant que:
rsync -avz --ignore-existing --recursive --delete
/var/www/ root@mydomaintest.com:/var/www/