hkのweblog

ひよっこエンジニアがにわとりになるまでの軌跡

rsyncについてのメモ

仕事をしているとサーバーに入ってrsyncを叩く機会がちょこちょこあります。
rsyncは便利ですが、失敗すると痛い目を見ることになるコマンドの一つなので使い方を軽くメモしておこうと思いました。

基本的な使い方

rsync -av /home/test/ dst

こう書くと、testの下にあるファイルが全てdstの下に同期されます。testの後にある「/」が鍵です。
「/」を入れるとtestの下にあるファイルが同期の対象となり、「/」を外すとtest自体が同期の対象になります。

なお、「-av」とオプションが付いていますが、「-a」はほぼ必須と言っていいオプションのようです。
ディレクトリを再帰的にコピーしたり、権限や所有者、変更時刻等をコピーするそうです。
次に「-v」ですが、こちらは転送したファイルのバイト数等々の詳細情報を表示してくれるオプションです。

注意したい使い方

上記のやり方で用が足りる場合も多いのですが、もう2つほど重要なオプションについて書いておきます。
1つ目は「--delete」です。こんなふうに使います。

rsync -av --delete /home/test/ dst

「--delete」が加わると、test配下で削除されたファイルをdstでも削除してくれます。
私は先日リリースの際にこのオプションを使ったのですが、一歩間違うと全部消えてしまうしまあ怖いわけです
(大半のデプロイでは内製したツールを使っていますが、たまたま触ったリポジトリが非常に更新頻度の低いリポジトリで置き去りにされていました)

そこで予行演習のようなオプションがあります。それが「-n」です。
これを付けてrsyncを実行すると、実際に転送は行わずに転送内容の表示だけを行ってくれます。dry-runというやつです。

rsync -avn --delete /home/test/ dst

これを事前に試しておけば、どのファイルを転送して、どのファイルが消えて、というのを確認できるのです。
これで安心して--deleteオプションを付けて実行できそうです。

ここまで書かなかったオプション(--excludeや--existingなど)もありますが、これもいずれ使う機会があるといいなと思います。