kzen.dev
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
 user2028856
user2028856
質問

Rsync --deleteオプションでターゲットディレクトリのファイルが削除されない

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

以下は、私が使っているコマンドです。

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

そこで質問なのですが、ターゲットディレクトリにある、元のディレクトリに存在しないファイルをすべて削除するにはどうしたらよいのでしょうか?

14 2015-04-16T11:15:48+00:00 2
 heemayl
heemayl
編集された質問 16日 4月 2015 в 12:34
Ubuntu
bash
rsync
12.04
解決策・回答
 A.B.
A.B.
16日 4月 2015 в 11:18
2015-04-16T11:18:44+00:00
さらに
ソース
編集
#38382274

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

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

"*"は必要ないので、これも使わないでください。

ファイルやディレクトリを除外・包含する場合は、このパラメータを使用します。

--exclude 'to_exclude*'
--include 'to_include*'
 Fabby
Fabby
編集した答え 24日 4月 2018 в 10:32
14
0
 heemayl
heemayl
16日 4月 2015 в 12:17
2015-04-16T12:17:30+00:00
さらに
ソース
編集
#38382289

このコマンドは、/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/
 heemayl
heemayl
編集した答え 16日 4月 2015 в 6:09
14
0
質問の追加
カテゴリ
すべて
技術情報
文化・レクリエーション
生活・芸術
科学
プロフェッショナル
事業内容
ユーザー
すべて
新しい
人気
1
Денис Васьков
登録済み 17時間前
2
Dima Patrushev
登録済み 2日前
3
sirojidddin otaboyev
登録済み 1週間前
4
Елена Гайдамамакинат
登録済み 1週間前
5
Иван Степанюк
登録済み 1週間前
JA
© kzen.dev :年
ソース
askubuntu.com
ライセンス cc by-sa 3.0 帰属