BLOGTIMES
2012/09/19

rsync とスラッシュの有無

 
このエントリーをはてなブックマークに追加

rsync の使い方としては SRC と DST を同期させる際に下記のようにすると思いますが、SRCの末尾に/があるときとないときで挙動が違います。

rsync -avz SRC DST

具体的には「/path/to/src」と「/path/to/src/」のような場合です。あまりにも何度もハマるのでメモを残すことにしました。
ハマる人が多いのか、解説をしているサイトは一杯あるんだけどどうもわかりにくいんですよね。

rsyncを使った熟練者レベルのバックアップ - SourceForge.JP Magazine : オープンソースの話題満載

たとえば、ホームディレクトリの下にあるファイルをUSBストレージデバイスにコピーしたければ、「rsync -a /home/user/dir/ /media/disk/dir/」とすればよい。ちなみに、rsyncは“/home/usr/dir/”と“/home/usr/dir”を区別する。最後のスラッシュがない場合、rsyncはそのディレクトリも含めて全体をコピーする。スラッシュがある場合、ディレクトリの中身をコピーするが、ディレクトリそのものは作られない。たとえば、/var/wwwを別のマシンか何かにミラーリングするなど、rsyncを使ってディレクトリ構造を複製しようとする場合は、最後のスラッシュを除く必要があるわけだ。

rsyncを使う多くの場合はSRCとDSTの中身を同一にしたい時でしょうから、SRC にはスラッシュつける必要があると覚えておくと良さそうです。もうちょっとうまい暗記方法がないものかなと思って検索して見たら、目から鱗な解説をしているエントリを見つけたのでこちらもメモ。これはいいですね。

地雷だらけのrsyncを理解する。 - こせきの技術日記

SRCスラッシュの有無は、mv SRC DEST と mv SRC/* DEST の違いと一緒。スラッシュの後ろに*が省略されているものと考える。

以下、動作のサンプル。

コピー前

例えばこんな感じのディレクトリがあった場合に、SRCにスラッシュがある場合とない場合でDSTに作られるディレクトリの構成が変わります。

/path/to/src/foo.txt /path/to/src/bar.txt /path/to/src/baz.txt /path/to/dst

sync後(スラッシュなし)

rsync -avz /path/to/src /path/to/dst
/path/to/src/foo.txt /path/to/src/bar.txt /path/to/src/baz.txt /path/to/dst/src/foo.txt /path/to/dst/src/bar.txt /path/to/dst/src/baz.txt

sync後(スラッシュあり)

rsync -avz /path/to/src/ /path/to/dst
/path/to/src/foo.txt /path/to/src/bar.txt /path/to/src/baz.txt /path/to/dst/foo.txt /path/to/dst/bar.txt /path/to/dst/baz.txt

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/5235
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン