Ваша команда не работала, потому что, когда вы использовали /var/www/*в качестве источника, ваша оболочка выполняет глобализацию, т.е. оболочка расширяется *на все файлы в этом каталоге и копирует файлы по одному, поэтому здесь отдельные файлы стали источниками, а не родительский каталог.
Таким образом, если вы используете /var/www/*, то вам не нужен --recursiveпараметр, поскольку *это приведет к копированию файлов (вместе с любыми каталогами с их содержимым), а не к родительскому каталогу, в котором находятся файлы. По той же причине --deleteне работает, так как --deleteудалит файлы из целевого каталога , которые не находятся в исходном каталоге , но вы копируете файлы, поэтому он не удаляет файлы (как ожидается).
Это сделает вас более понятным:
/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
Как вы можете видеть, я использовал источник, так как /foo/*выполняемая rsyncкоманда
rsync -avz --ignore-existing --recursive --delete /foo/egg
/foo/spam /foo/test /bar/
с *созданием оболочки для его расширения и создания всех файлов по отдельности в качестве исходных аргументов, а не родительского каталога в целом (и --recursiveв этом случае вам также не нужен )
Итак, если вы хотите сделать --deleteработу, запустите ее как:
rsync -avz --ignore-existing --recursive --delete
/var/www/ root@mydomaintest.com:/var/www/