初心者のWEBデザイン

HTML,CSS、その他WEBデザインに関する事を記述していきます。

rsync フォルダ毎の差分だけを同期させる(バックアップ)

rsync -auv コピー元フォルダ コピー先フォルダ オプション -u 同期先のファイルの方が新しい場合はスキップする -v 冗長メッセージの表示の有無

コピー元フォルダの指定に【/】スラッシュの有無で動きが違いますので注意してください。

今回は下記のディレクトリで説明します。イヌ/カレーの中身がないのでネコ/カレーとの 同期を取っていきましょう。

.
├── イヌ
│   └── カレー
└── ネコ
    └── カレー
        ├── お肉
        ├── タマネギ
        ├── ニンジン
        └── ジャガイモ

スラッシュあり

NG

rsync -auv ネコ/カレー/ イヌ

結果は残念なことにイヌ/カレーの中に材料をコピーしたかったのですが、 イヌ直下に材料が配置されてしまいます。 ネコ/カレー/の中身をイヌ/直下と同期するよ。という意味になります。

結果

.
├── イヌ
│   ├── お肉
│   ├── カレー
│   ├── タマネギ
│   ├── ニンジン
│   └── ジャガイモ
└── ネコ
    └── カレー
        ├── お肉
        ├── タマネギ
        ├── ニンジン
        └── ジャガイモ

スラッシュありで正確に同期を取るにはこうします。

OK

ネコ/カレー/の中身をイヌ/カレーと同期するよ。という意味になります。

rsync -auv ネコ/カレー/ イヌ/カレー コマンド結果

.
├── イヌ
│   └── カレー
│       ├── お肉
│       ├── タマネギ
│       ├── ニンジン
│       └── ジャガイモ
└── ネコ
    └── カレー
        ├── お肉
        ├── タマネギ
        ├── ニンジン
        └── ジャガイモ

スラッシュなし

スラッシュなしだと【ネコ】フォルダ本体を指します。 ですからコピー先はそのネコフォルダを置くことになります。 イヌ/直下にカレーフォルダがない場合でも、ネコ/カレー/を同期しますので 問題なく動作します。

rsync -auv ネコ/カレー イヌ

コマンド結果

.
├── イヌ
│   └── カレー
│       ├── お肉
│       ├── タマネギ
│       ├── ニンジン
│       └── ジャガイモ
└── ネコ
    └── カレー
        ├── お肉
        ├── タマネギ
        ├── ニンジン
        └── ジャガイモ

仮にイヌ/カレーの材料が複数(例えばタマネギ・ニンジンが)足りない場合にもネコ/カレー/フォルダの中身との整合性を取ってくれます。

実際のプロジェクト管理に使うには

上記の説明では同期元・同期先のフォルダ名が異なりました。 しかし通常のプロジェクト管理であれば、同期元・同期先のフォルダ名は同じケースが多いです。ですからスラッシュなしで同期するのが簡単だと思います。

例えば下記のようなケースで、材料が足りない場合です。

.
├── 同期元
│   └── ネコ
│       └── カレー
│           ├── お肉
│           ├── タマネギ
│           ├── ニンジン
│           └── ジャガイモ
└── 同期先
    └── ネコ
        └── カレー
            └── お肉

rsync -auv 同期元/ネコ 同期先 こうすることで同期(材料の整合性)が取れました。

.
├── 同期元
│   └── ネコ
│       └── カレー
│           ├── お肉
│           ├── タマネギ
│           ├── ニンジン
│           └── ジャガイモ
└── 同期先
    └── ネコ
        └── カレー
            ├── お肉
            ├── タマネギ
            ├── ニンジン
            └── ジャガイモ