Twoje polecenie nie działało, ponieważ gdy używasz go /var/www/*jako źródła, twoja powłoka wykonuje na nim globbing, tzn. Powłoka się rozwija* do wszystkich plików w tym katalogu i kopiuje pliki jeden po drugim, więc tutaj pojedyncze pliki stały się źródłami, a nie katalog nadrzędny.
Tak więc, jeśli używasz /var/www/*, nie potrzebujesz --recursiveopcji, ponieważ *spowoduje to skopiowanie plików (wraz z dowolnymi katalogami z ich zawartością), a nie katalogu nadrzędnego zawierającego pliki. Z tego samego powodu --deletenie działa, ponieważ --deleteusunie pliki z katalogu docelowego , które nie znajdują się w katalogu źródłowym , ale kopiujesz pliki, więc nie usuwa plików (prawdopodobnie).
Dzięki temu będziesz bardziej zrozumiały:
/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
Jak widać, użyłem źródła, ponieważ /foo/*stąd rsyncwykonywane jest polecenie
rsync -avz --ignore-existing --recursive --delete /foo/egg
/foo/spam /foo/test /bar/
z *tworzeniem powłoki w celu jej rozszerzenia i tworzenia wszystkich plików osobno jako argumentów źródłowych, a nie katalogu nadrzędnego jako całości ( --recursivew tym przypadku również nie potrzebujesz ).
Jeśli więc chcesz --deletepracować, uruchom go jako:
rsync -avz --ignore-existing --recursive --delete
/var/www/ root@mydomaintest.com:/var/www/