この記事の所要時間: 約 0分39秒
rsyncで以前困ったこと。
--deleteを付けて同期しているのに、同期元で削除したファイルがなぜか同期先で消えない現象が発生。
結局理由は、同期元のパスに*(アスタリスク)を付けていたのが原因だった。
ディレクトリ構成は↓な感じ。
CODE:
-
$ find ./
-
./src/
-
./src/a
-
./des
-
./des/a
-
./des/b
bはdes/にはあるが、src/には無いので--delete付けると、消えるはず。
CODE:
-
$ rsync -avz --delete src/* des/
-
$ find ./
-
./src/
-
./src/a
-
./des
-
./des/a
-
./des/b <--- 消えてない。。。
アスタリスク無しで実行すればok。
CODE:
-
$ rsync -avz --delete src/ des/
-
$ find ./
-
./src/
-
./src/a
-
./des
-
./des/a
-
<--- 消えた!
ちなみにsrc/以下のサブディレクトリについては、[*]付けてもokでした。[*]を指定したディレクトリでは、ディレクトリエントリは見ないのかな。
rsyncでディレクトリを指定する際は、末尾に[/]を付けるつけないで挙動が変わるから、安全のために[*]を付けていたのが、逆に仇となったという話でした。パラメータはキチンと把握しておこう。
- Newer: PHP 配列を回すならforかforeachか
- Older: CakePHP Modelに関する6つの誤解
コメント (Close):1
- ぺ 11-01-19 (水) 10:55
-
rsync -avz --delete src/* des/
は
rsync -avz --delete src/a des/
のコマンドを実行しているのと同じなので
des/b
は対象にならないと思います。
トラックバック:0
- このエントリーのトラックバックURL
- http://www.1x1.jp/blog/2008/04/rsync_delete_asterisk.html/trackback
- Listed below are links to weblogs that reference
- rsyncの–deleteでファイルが削除されない from Shin x blog
