- 2008-04-24 (木) 22:14
- unix
rsyncで以前困ったこと。
–deleteを付けて同期しているのに、同期元で削除したファイルがなぜか同期先で消えない現象が発生。
結局理由は、同期元のパスに*(アスタリスク)を付けていたのが原因だった。
ディレクトリ構成は↓な感じ。
$ find ./ ./src/ ./src/a ./des ./des/a ./des/b
bはdes/にはあるが、src/には無いので–delete付けると、消えるはず。
$ rsync -avz –delete src/* des/
$ find ./
./src/
./src/a
./des
./des/a
./des/b <--- 消えてない。。。
[/code]
アスタリスク無しで実行すればok。
$ rsync -avz –delete src/ des/
$ find ./
./src/
./src/a
./des
./des/a
<--- 消えた!
[/code]
ちなみに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
- /blog/2008/04/rsync_delete_asterisk.html/trackback
- Listed below are links to weblogs that reference
- rsyncの–deleteでファイルが削除されない from Shin x blog