Rsync を使用してローカルおよびリモート ディレクトリを同期する方法

Introduction

Rsync は、「リモート同期」の略で、リモートおよびローカル ファイルの同期を行うツールです。 このガイドでは、この強力なユーティリティの基本的な使用方法を説明します。

Rsyncとは

Rsync は非常に柔軟なネットワーク対応同期ツールです。 Linux や Unix 系システムで広く使われており、システム スクリプトのツールとして人気があるため、ほとんどの Linux ディストリビューションにデフォルトで含まれています。

基本構文

rsyncの基本構文は非常に簡単で、ssh や scp、cp と同様の方法で動作します。

以下のコマンドで、2 つのテスト ディレクトリといくつかのテスト ファイルを作成します。

  • cd ~
  • mkdir dir1
  • mkdir dir2
  • touch dir1/file{1..100}

これで、dir1 というディレクトリとその中に 100 の空のファイルができました。

  • ls dir1
Output
file1 file18 file27 file36 file45 file54 file63 file72 file81 file90file10 file19 file28 file37 file46 file55 file64 file73 file82 file91file100 file2 file29 file38 file47 file56 file65 file74 file83 file92file11 file20 file3 file39 file48 file57 file66 file75 file84 file93file12 file21 file30 file4 file49 file58 file67 file76 file85 file94file13 file22 file31 file40 file5 file59 file68 file77 file86 file95file14 file23 file32 file41 file50 file6 file69 file78 file87 file96file15 file24 file33 file42 file51 file60 file7 file79 file88 file97file16 file25 file34 file43 file52 file61 file70 file8 file89 file98file17 file26 file35 file44 file53 file62 file71 file80 file9 file99

また、dir2という空のディレクトリもできました。

同じシステムでdir1の内容をdir2に同期させるには、次のように入力します:

  • rsync -r dir1/ dir2

オプションは recursive という意味で、ディレクトリ同期に必要なものです。

代わりに -a フラグを使用することもできます:

  • rsync -a dir1/ dir2

-a オプションは組み合わせフラグです。 これは「アーカイブ」の略で、再帰的に同期し、シンボリックリンク、特殊ファイル、デバイスファイル、修正時刻、グループ、オーナー、パーミッションを保持する。

重要な注意事項

上記のコマンドの最初の引数の最後にスラッシュ (/) があることに気づいたかもしれません:

  • rsync -a dir1/ dir2

これは「dir1 の内容」という意味で必要なものです。 最後のスラッシュがない場合、ディレクトリを含む dir1dir2 の中に置かれることになる。 この場合、次のような階層になります:

  • ~/dir2/dir1/

rsync コマンドを実行する前に、必ず引数をダブルチェックしてください。 Rsync は、-n または --dry-run オプションを渡すことによって、これを行う方法を提供します。

  • rsync -anv dir1/ dir2
Output
sending incremental file list./file1file10file100file11file12file13file14file15file16file17file18. . .

この出力を、最後のスラッシュを削除したときの出力と比較してみてください:

  • rsync -anv dir1 dir2
Output
sending incremental file listdir1/dir1/file1dir1/file10dir1/file100dir1/file11dir1/file12dir1/file13dir1/file14dir1/file15dir1/file16dir1/file17dir1/file18. . .

ここでは、ディレクトリ自体が転送されていることがわかります。

How To Use Rsync to Sync with a Remote System

Syncing to a remote system is trivial if you have SSH access to the remote machine and rsync installed on both side.これは、リモート マシンへの SSH アクセスと、双方でインストールされた rsync があれば、リモート システムへの同期は簡単です。 2 台のマシン間で SSH アクセスが確認されたら、次の構文を使用して、先ほどの dir1 フォルダーをリモート コンピュータに同期できます (この場合、実際のディレクトリを転送したいので、最後のスラッシュを省略することに注意してください):

  • rsync -a ~/dir1 username@remote_host:destination_directory

これは、ローカル システムからリモート システムへディレクトリをプッシュするため「プッシュ」操作と呼ばれています。 反対の操作は「pull」である。 これは、リモートディレクトリをローカルシステムに同期させるために使用されます。 dir1 がローカル システムではなくリモート システムにある場合、構文は次のようになります:

  • rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine

cp や同様のツールと同様に、ソースは常に最初の引数であり、宛先は常に 2 番目です。

Rsync

Rsync にはユーティリティのデフォルト動作を変更するための多くのオプションが用意されています。 より必要なフラグのいくつかについてはすでに説明しました。

テキスト ファイルのように、まだ圧縮されていないファイルを転送する場合、-z オプションで圧縮を追加することにより、ネットワーク転送を削減できます。

  • rsync -az source destination

-P フラグは非常に便利です。 これはフラグ --progress--partial を組み合わせたものである。 これらのうち最初のものは転送の進捗バーを表示し、2番目は中断された転送を再開することができます:

  • rsync -azP source destination
Output
sending incremental file list./file1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)file100 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101)file11 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101). . .

このコマンドをもう一度実行すると、変更が行われていないため、短い出力を得ることができます。 これは、変更が行われたかどうかを判断するために変更時間を使用する rsync の機能を示しています。

  • rsync -azP source destination
Output
sending incremental file listsent 818 bytes received 12 bytes 1660.00 bytes/sectotal size is 0 speedup is 0.00

いくつかのファイルの変更時間を更新すると、rsync が変更されたファイルのみを賢く再コピーしていることがわかります:

  • touch dir1/file{1..10}
  • rsync -azP source destination
Output
sending incremental file listfile1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101). . .

二つのディレクトリを本当に同期しておくために、ファイルがソースから削除されると、宛先ディレクトリのファイルを削除することが必要です。 デフォルトでは、rsync は宛先ディレクトリから何も削除しません。

この動作は --delete オプションで変更できます。 このオプションを使用する前に、--dry-run オプションを使用して、データ損失を防ぐためのテストを行ってください。

  • rsync -a --delete source destination

同期中のディレクトリ内にある特定のファイルまたはディレクトリを除外したい場合、--exclude= オプションに続くカンマ区切りのリストで指定することにより、それを実行できます。

  • rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination

最後に、rsyncの--backupオプションは、重要なファイルのバックアップを保存するために使用できる。 これは、バックアップ・ファイルを格納するディレクトリを指定する --backup-dir オプションと一緒に使用します。

  • rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination

結論

Rsync は、ネットワーク接続でのファイル転送を簡略化し、ローカル・ディレクトリの同期に堅牢性を追加することができます。 rsync の柔軟性により、多くの異なるファイルレベルの操作に適した選択肢となります。

rsync をマスターすると、複雑なバックアップ操作を設計し、何をどのように転送するかをきめ細かく制御することが可能になります。

コメントを残す

メールアドレスが公開されることはありません。