Tag: rsync

目次

関連ページ

参考情報

概要

  • UNIXの定番ファイル同期/転送コマンド。

基本的な使い方

考え方の基本

  • SRC/*をDESTディレクトリにコピーする場合以下のコマンドを使用する。
    rsync -avz SRC/ DEST
  • SRCディレクトリの末尾のスラッシュの有無が重要。DESTの末尾は関係ない。
    • 末尾スラッシュつきのSRC/の場合SRC/*と考えると分かりやすい。DESTの内部にディレクトリが作られない。
    • 末尾スラッシュなしの場合、DESTの内部にフォルダが作られる。
    • ただしリモートがシンボリックリンクで実態をコピーしたい場合"SRC/"でやらないとシンボリックリンクが作成されてしまう。
  • 安全のためには空のDESTディレクトリを作成してテストするのが良い。こせきの技術日記によるとSRCの末尾に常にスラッシュを追加するのが推奨されてる。
  • 基本オプションは"-av"。"-z"を追加すると圧縮される。
  • "--delete"でDESTに存在しないファイルが削除される。
  • "--exclude='vendor/bunlde'"のような指定でフォルダを無視できる。複数のパターンを指定したい場合"--exclude='log/*' --exclude='tmp/*'のように指定できる

コピー元からコピー先へ同期

  • 基本オプション"-av"を使う
    rsync -av ~/dir1/ /media/disk/backup/

※コピー先ディレクトリがなければ作られる。

コピー元からコピー先へ同期(削除もする)

  • 基本オプション"-av"と"--delete"を同時指定
    rsync -av --delete ~/dir1/ /media/disk/backup/

実用基本形

  • 以上を踏まえリモートフォルダをローカルにバックアップコピーする場合の基本形。wwwフォルダはbackupの中に作られない(copy from_dir/* to_dirの*省略と考えるとわかりやすい)。zは圧縮オプション。
    rsync -az --delete -e ssh demohost:/home/www/ /home/backup
  • コピー元に末尾スラッシュをつけて、コピー先にからディレクトリを指定するほうが安全。

Tips

コピー元のスラッシュの取り扱い

  • 例えば以下のような構造のフォルダがある場合を考える。
    .
    ├── a
    │   └── a.txt
    ├── b
    │   └── b.txt
    └── c
    
  • aフォルダをスラッシュ付きで、bフォルダをスラッシュなしでコピー
    rsync -av a/ c
    rsync -av b c
  • すると次のようになる。転送元フォルダの最後にスラッシュがあるとそのフォルダ自体はコピー先に作られない。
    .
    ├── a
    │   └── a.txt
    ├── b
    │   └── b.txt
    └── c
        ├── a.txt
        └── b
            └── b.txt
    

シェルスクリプトの変数にオプションを入れて使いたい

  • そのまま変数に「opt="--exclude='log'"」のように入れてオプション変数として利用しても、シングルクォートがエスケープされてしまいうまく動かない(set -xしてみるとよくわかる)
  • 次のように、配列として渡すといいらしい。bash - rsync option in a variable - Stack Overflow
    roption=(
        -a
        --recursive
        --progress
        --exclude='class'
        --delete
        --exclude='exclude'
        --exclude='.svn'
        --exclude='.metadata'
        --exclude='*.class'
    )
    
    rsync "${roption[@]}" /media/CORSAIR/workspace ~/
    

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-01-16 (水) 16:28:43 (61d)