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 --recursive
opcji, 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 --delete
nie działa, ponieważ --delete
usunie 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 rsync
wykonywane 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 ( --recursive
w tym przypadku również nie potrzebujesz ).
Jeśli więc chcesz --delete
pracować, uruchom go jako:
rsync -avz --ignore-existing --recursive --delete
/var/www/ root@mydomaintest.com:/var/www/