今回、Linux コマンド 「RSYNC」を使って下記2つのフォルダの同期する方法をご紹介いたします。
前提として、
「/home/user/A」:ソースフォルダ(通常の作業フォルダ)
「/home/user/B」:バックアップフォルダ
の 2 つのフォルダーがあります。
フォルダー A は通常のファイルとフォルダーが保存される場所で、通常の作業フォルダとして使っています。フォルダー B はフォルダー A の完全なバックアップフォルダとして同期(完コピ)機能するバックアップ フォルダーです。(フォルダー B にはユーザーが直接保存したり変更したりするものはありません)。
今回の同期方法を紹介する背景は、下記のようなたくさんの質問を受けています。
質問:
フォルダーBにのみ存在するファイルを一覧表示するにはどうすればよいですか? (例: 前回の同期以降にフォルダー A から削除されたもの。)
フォルダーBにのみ存在するファイルをフォルダーAにコピーするにはどうすればよいですか?
両方のフォルダーに存在するが、タイムスタンプやサイズが異なるファイルを一覧表示するにはどうすればよいですか? (前回の同期以降にフォルダー A で変更されたもの。数万個のファイルがあり、プロセスが遅くなりすぎるため、チェックサムの使用は避けたいと考えています。)
フォルダー A の正確なコピーをフォルダー B に作成するにはどうすればよいですか? つまり、フォルダー A のすべてをフォルダー A にのみ存在するフォルダー B にコピーし、フォルダー B にのみ存在するフォルダー B のすべてを削除しますが、両方のフォルダーにある同じファイルには触れません。
といったところです。
《解決方法》
フォルダー A とフォルダー B の内容を同じにしたい場合は、ソースとして /home/user/A/ (スラッシュ付き) を入力します。 これは、フォルダー A自体 ではなく、フォルダー A配下すべてのコンテンツをフォルダー B に入れます。
# rsync -avu –delete “/home/user/A/” “/home/user/B”
-a すべてのファイルシステム属性を維持して同期を実行します。
-v 同期進捗を確認します。
-u 変更時刻が新しいファイルのみをコピーします (時刻が等しい場合はサイズが異なります)。
–delete ソースに存在しないターゲット フォルダー内のファイルを削除します。
フォルダー A自体をフォルダー B に入れて同期したい場合下記コマンドを使います。
※Aの後に”/”(スラッシュ)を付かない。
# rsync -avu –delete “/home/user/A” “/home/user/B”