/var/www/*
ソースとして使用しているときにシェルがグロビングを実行しているため、コマンドが機能していませんでした。つまり、シェルは*
そのディレクトリ内のすべてのファイルに展開し、ファイルを1つずつコピーするため、個々のファイルがソースではなくソースになりました親ディレクトリ。
そのため、を使用する場合、ファイルを含む親ディレクトリではなく、ファイルが(内容を含むディレクトリとともに)コピーされるため、オプション/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/