Ваша команда не работала, потому что, когда вы использовали /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/