web-dev-qa-db-ja.com

Rsync --deleteオプションはターゲットディレクトリ内のファイルを削除しません

rsync--deleteオプションを使用して、元のディレクトリに存在しないターゲットディレクトリのファイルを削除しようとしています。

私が使用しているコマンドは次のとおりです。

rsync -avz --ignore-existing --recursive --delete /var/www/* [email protected]:/var/www

だから私の質問は、元のディレクトリに存在しないターゲットディレクトリ内のすべてのファイルを削除するにはどうすればよいですか?

12
user2028856

次のコマンドを使用します。

rsync --archive --verbose --compress --ignore-existing --delete /var/www/ [email protected]:/var/www

「*」は必要ないので、使用しないでください。

ファイルまたはディレクトリを除外/含めるには、次のパラメータを使用する必要があります。

--exclude 'to_exclude*'
--include 'to_include*'
13
A.B.

ソースとして/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/ [email protected]:/var/www/
14
heemayl