2010年12月26日日曜日

rsyncのinclude,excludeで注意すること

とりあえず3点
1.--excludeする前に--includeしておかないと意味が無い
2.あるフォルダ配下のファイルを対象にしたかった場合はフォルダ自体もincludeする
3.include,excludeは同期元ファイルからの相対パス

で例を使って説明します
以下の場合を想定
.
|-- dst
`-- src
    |-- ABC
    |   |-- A
    |   |-- B
    |   `-- C
    |-- a
    |-- b
    |-- c
    |-- d
    |-- e
    `-- f

まずsrcフォルダからdstフォルダへ同期するとします
1の注意点から
↓のようにやっても何一つ同期されません。最初に全部弾いているので駄目
rsync -av --delete-excluded --exclude="*" --include="a" src/ dst/
下記のようにexcludeを後に置けばすればaだけ同期できます
rsync -av --delete-excluded --include="a" --exclude="*" src/ dst/

2の注意点について
ABCディレクトリ配下のみ同期したい場合
こうしてもうまくいきません(excludeで全部弾かれてしまいます)
rsync -av --delete-excluded --include="ABC/*" --exclude="*" src/ dst/
ABC配下のみ同期したい場合はまずABCをincludeします
↓のようにやればOK
rsync -av --delete-excluded --include="ABC" --include="ABC/*" --exclude="*" src/ dst/

3の注意点について
これは言わなくてもご存知かと思います
上記例の --include="ABC" は実際にはsrc/ABCを意味するんですよということ
相対パスになっています

参考リンク
http://blog.livedoor.jp/kurt0027/archives/51808421.html
http://blog.elkc.net/?p=273

0 件のコメント: