Linux rsync コマンドの 10 の便利な例
公開: 2022-10-28
 Linux のrsyncコマンドは、強力なファイル コピーおよびフォルダー同期ツールです。 ここでは、独自のシステムでうまく利用できる 10 の一般的なユース ケースを紹介します。
rsync ツール
rsyncツールは、2 台のコンピューター間でファイルとディレクトリをコピーします。 ディレクトリ ツリーをスキャンして、移行先コンピュータには存在しない移行元コンピュータ上のファイルを見つける高度なアルゴリズムを使用します。 これらのファイルは、宛先コンピューターに送信されます。 ryncが優れている点は、既存のファイルのどの部分が変更されたかを把握し、変更された部分のみを送信できることです。
 rsyncを使用して、ハード ドライブの別の場所、同じコンピューターの別のハード ドライブ、外部接続された USB ドライブ、またはその他のネットワーク アクセス可能な場所にファイルをコピーできます。 
さらに、 rsyncはオプションで、シンボリック リンク、ハード リンク、およびファイルの所有権、アクセス許可、アクセス時間などのファイル メタデータを保持できます。 このすべての機能をサポートするために、 rsyncには多くのオプションがあり、それらをすべて理解するには時間がかかります。 開始するのに役立つこれらの 10 の例を集めました。 rsyncでバックアップを行うことについてはすでに書いたので、ここでは他の用途に集中しています。
 多くのオプションがあるにもかかわらず、 rsyncコマンドの構造は単純です。 ソース、宛先、および使用するオプションを提供する必要があります。 おそらく、 rsyncが Linux コンピューターに既にインストールされていることに気付くでしょう (すべてのテスト マシンにインストールされていました)。
1.ファイルを別のディレクトリにコピーする
これは簡単な例です。 ファイルを「project-files」ディレクトリから「Documents」ディレクトリにコピーします。 -a (アーカイブ) オプションと-v (詳細) オプションの 2 つのオプションを使用しています。 verbose オプションは、 rsyncが何をしているのかを説明するように指示します。 archiveオプションは、ファイルの所有権と、後で説明するその他の項目を保持します。
 コマンドの形式はoptions source-location destination-locationです。
rsync -av /home/dave/project-files/ /home/dave/Documents/

 「Documents」フォルダでlsを使用すると、ファイルがコピーされたことがわかります。 

 rsyncが動作している間、ファイルはコピーされたときに一覧表示されます。 言われました:
- 送信されるバイト数。
-  受信したバイト数。 ファイル転送が行われる前に、 rsyncはどのファイルを転送する必要があるかを判断する必要があります。 そのためには、送信先のファイルに関するいくつかの情報をrsyncで取得する必要があります。 この情報は、受信したバイトに含まれています。
- 転送速度。
- コピーされたファイルの合計サイズ。
- 「スピードアップ」。 これは、合計サイズを送受信バイトの合計で割った比率です。 この数値が高いほど、転送が効率的になります。
 ソース ディレクトリのテキスト ファイルを変更し、 rsyncコマンドを繰り返しました。
rsync -av /home/dave/project-files/ /home/dave/Documents/

今回更新する必要があるファイルは、変更したテキスト ファイルだけです。 スピードアップの数値は現在 30,850 です。 これは、すべてのファイルをコピーするよりも、その 1 つのファイルの変更された部分をコピーする方がはるかに効率的であるということです。
 -a (アーカイブ) オプションは、実際には他のオプションのコレクションを表します。 これらのオプションをすべて使用するのと同じです。
- r : ソース ディレクトリのディレクトリ ツリーを再帰的に処理し、それらを宛先ディレクトリにコピーし、そこにまだ存在しない場合は作成します。
- l : シンボリック リンクをシンボリック リンクとしてコピーします。
- p : ファイルのパーミッションを保持します。
- t : ファイルの変更時刻を保持します。
- g : グループ権限を保持します。
- o : ファイルの所有権を保持します。
- D : 特殊ファイルとデバイス ファイルをコピーします。 特殊ファイルは、ソケットや先入れ先出しパイプ (FIFO) など、ファイルのように扱われる通信中心のアイテムにすることができます。 デバイス ファイルは、デバイスおよび疑似デバイスへのアクセスを提供する特別なファイルです。
 これは非常に頻繁に使用される組み合わせであり、 rsyncはそれらすべてを呼び出す簡単な方法として-a (アーカイブ) オプションを提供します。
2. ディレクトリを別のディレクトリにコピーする
前のrsyncコマンドを見ると、ソース ディレクトリのファイル パスの末尾にスラッシュ「/」が表示されます。 これは重要です。 ディレクトリの内容をコピーするようにrsyncに指示します。 末尾のスラッシュを指定しない場合、 rsyncはディレクトリとその内容をコピーします。
rsync -av /home/dave/project-files /home/dave/Documents/

今回は、リストされているとおりに、ファイル名にディレクトリ名が追加されます。 宛先ディレクトリ内を見ると、ソース フォルダがその中のファイルとともにコピーされていることがわかります。
ls ドキュメント/
ls ドキュメント/プロジェクト ファイル/

3. ディレクトリを別のドライブにコピーする
ファイルを同じハード ドライブの別の場所にコピーしても、ドライブの障害に対する保護は得られません。 そのドライブがゴーストを放棄した場合、それらのファイルのコピー元とコピー先のコピーが失われます。 それらを別のハード ドライブにコピーすることは、データを保護するためのより確実な方法です。 必要なのは、宛先ドライブへの正しいパスを提供することだけです。
rsync -av /home/dave/project-files /run/mount/drive2

もう一方のハード ドライブを見ると、ディレクトリとファイルがそこにコピーされていることがわかります。
ls run/mount/drive2/project-files/

関連:ハード ドライブに障害が発生した場合の対処方法
4. 最初に予行演習を行う
rsyncがファイルを削除するのに役立つ方法を確認する前に、 rsyncで予行演習を実行する方法を見てみましょう。
 予行演習では、 rsyncは要求されたアクションを実行する動作を実行しますが、実際には実行しません。 コマンドが実行された場合に何が起こるかを報告します。 このようにして、コマンドが期待どおりに動作することを確認できます。
 予行演習を強制するには、 --dry-runオプションを使用します。
rsync -av --dry-run /home/dave/geocoder /run/mount/drive2

 コピーされたはずのファイルが一覧表示され、通常の統計情報が表示され、その後にメッセージ(DRY RUN)が表示されるので、実際には何も行われていないことがわかります。

5. 宛先ディレクトリ内のファイルの削除
--deleteオプションは、ソース ディレクトリにない宛先ディレクトリ内のファイルとディレクトリを削除するようにrsyncに指示します。 これは、宛先ディレクトリがソース ディレクトリの正確なコピーになることを意味します。 慎重に--dry-runオプションを最初に使用します。
rsync -av --delete --dry-run /home/dave/geocoder /run/mount/drive2

 2 つのファイルが削除されることが通知されました。 それらが削除されてもかまわないと確信している場合は、 --dry-runオプションを削除して、実際にコマンドを実行できます。
rsync -av --delete /home/dave/geocoder /run/mount/drive2

今回は、ディレクトリの内容が同期され、2 つの余分なファイルが削除されます。
6. ソースファイルの削除
転送が成功した後、ソース ファイルを削除することを選択できます。これにより、 rsyncはコピーというより移動のように動作します。 転送が成功しなかった場合、ソース ファイルは削除されません。 使用する必要があるオプションは--remove-source-files 。
rsync -av --remove-source-files /home/dave/geocoder /run/mount/drive2

 ファイルが転送されていない場合でも、ファイルが削除される可能性があることに注意してください。 これは、 rsyncがチェックし、すべてのファイルが既に宛先ディレクトリにあり、 rsyncが何もする必要がない場合、 rsyncは転送が成功したと見なすためです。
 また、 rsyncはソース ディレクトリからファイルを削除するだけです。 ソース ディレクトリやサブディレクトリは削除されず、その中のファイルだけが削除されます。 これは、ソース ディレクトリでlsに-R (再帰) オプションを使用することで確認できます。
ls -R ジオコーダ

7. ファイルをリモート コンピューターにコピーする
フォルダーをリモート コンピューターと同期するには、両方のコンピューターにrsyncをインストールする必要があります。 リモート コンピューターにrsyncを使用する前に、2 台のコンピューター間の SSH 通信をセットアップします。 
rsyncを機能させるには、リモート コンピューターに通常のユーザーとしてリモートでログインできる必要があります。 ID とパスワードを使用してログインするか、パスワードなしで安全にアクセスできるように SSH キーを設定しているかは問題ではありませんが、ユーザーとしてログインできない場合、 rsyncは機能しません。また。
 パスワードでログインすると、 rsyncはパスワードの入力を求めます。 SSH キーを使用してログインする場合、プロセスはシームレスです。
 追加で行う必要があるのは、リモート コンピューターのユーザー アカウント名と IP アドレスを宛先ファイル パスの先頭に追加することだけです。 アットマーク「 @ 」を使用してユーザー名をコンピューター名または IP アドレスから分離し、コロン「 : 」を使用してコンピューター名または IP アドレスをディレクトリ パスから分離します。
テスト ネットワークでは、これら 2 つのコマンドは同等です。
rsync -av /home/dave/geocoder [email protected]:/home/dave/Downloads
rsync -av /home/dave/geocoder [email protected]:/home/dave/Downloads

ファイルをローカルにコピーするときと同じ情報が報告されます。
8. ファイルまたはディレクトリを含めるまたは除外する
ソース ディレクトリに、コピー先のコンピューターにコピーしたくないファイルやディレクトリがある場合があります。 --excludeオプションを使用してそれらを除外できます。 同様に、 --includeオプションを使用して、特定のファイルとディレクトリを含めることを選択できます。
 --includeオプションを単独で使用すると、特別にインクルードされたファイルを含め、すべてのファイルが通常どおりコピーされます。 含まれているファイルのみをコピーするには、 --exclude他のすべてを除外する必要があります。
 コマンドで--includeおよび--excludeオプションを好きなだけ使用できますが、必ず--includeオプションを--excludeオプションの前に配置してください。 また、ソース ファイル パスの末尾にスラッシュがあることを確認してください。
このコマンドは、C ソース コード ファイルと CSV データ ファイルのみをコピー先コンピューターにコピーします。
 rsync -av --include="*.c" --include="*.csv" --exclude="*" /home/dave/geocoder/ /run/mount/drive2/geocoder 
コピーされるファイルは、特別に含めたファイルのみです。
9. 転送時にファイルを圧縮する
-z (圧縮) オプションを指定すると、 rsyncは転送されたファイルを圧縮します。 ただし、転送先のコンピューターに圧縮ファイルとして保存されるのではなく、転送中にのみ圧縮されます。 これにより、長い転送を高速化できます。
rsync -avz /home/dave/geocoder /run/mount/drive2

10.進捗状況の監視
長い転送といえば、転送の進行状況を確認できるように統計を追加できます。
 -P (partial, progress) オプションは、実際には--partialと--progressの 2 つのオプションを追加します。 --partialオプションは、転送が失敗した場合に部分的に転送されたファイルを保持するようにrsyncに指示します。 これにより、転送を再開するときの時間を節約できます。
 --progressオプションは、ファイルごとに、転送されたデータ (バイト単位およびパーセンテージ)、転送速度、所要時間、転送中のファイル数、および残りのファイル数を出力します。
rsync -aP /home/dave/geocoder /run/mount/drive2

 出力は非常に速くスクロールされ、読みにくいです。 コマンドから-v (verbose) オプションを削除すると、状況が少し改善されます。 それでも、ぐるぐると通り過ぎるので読むのはまだ難しいです。 

多くの場合、転送全体の進行状況を監視する方が便利です。 これは、–info オプションを使用して実行でき、「progress2」をパラメーターとして渡します。
sync -a --info=progress2 /home/dave/geocoder /run/mount/drive2

これにより、実際に役立つ進捗レポートが得られます。
ステロイドの cp のように
rsyncコマンドは高速で柔軟性があり、慣れるのに十分な時間を費やす価値があります。 -avオプション、ソース ディレクトリ、および宛先ディレクトリを指定したrsyncコマンドの基本的な形式は、まったく覚えにくいものではありません。
多くのユースケースでは、これで十分です。 それに慣れれば、残りは簡単にできます。
関連: Rsyncでデータを同期するための初心者向けガイド


