本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「rsync」コマンドです。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、異なるホスト間でもファイルやディレクトリを同期できる「rsync」コマンドです。
「rsync」は、リモート環境とファイルやディレクトリを「同期(sync)する」というコマンドです。ローカル環境のみでも使用できます。「変更があった分だけ更新する」という機能があるので、ディレクトリ単位のバックアップで特に便利に使えます。
rsyncコマンドの主なオプションは次の通りです。
短いオプション | 長いオプション | 意味 |
---|---|---|
-v | --verbose | 動作内容を表示する |
-q | --quiet | 動作中のメッセージを抑制する |
-n | --dry-run | 試験モード。実際には動作せず、動作内容だけ表示する(「-v」や「--stats」を一緒に指定する) |
--stats | ファイル数や転送サイズを表示する | |
--list-only | コピーする代わりにファイルのリストを作成する | |
-a | --archive | アーカイブモード(「-rlptgoD -no-H -no-A -no-X」相当) |
--no-オプション | 指定したオプションを無効にする(「-H」を無効にする場合は「--no-H」のように指定する) | |
-I | --ignore-times | サイズとタイムスタンプが同じファイルも処理する |
--size-only | サイズが同じファイルは処理しない | |
-c | --checksum | 更新日とサイズではなく、チェックサムで変更の有無をチェックする |
--daemon | デーモンとして動作(「--daemon --help」でデーモン時に使用できるオプションが確認できる) | |
短いオプション | 長いオプション | 意味 |
---|---|---|
-r | --recursive | ディレクトリを再帰的に処理する |
-l | --links | シンボリックリンクをシンボリックリンクのままコピーする |
-p | --perms | パーミッションを保持する |
-t | --times | タイムスタンプを保持する |
-g | --group | 所有グループをそのまま保持する |
-o | --owner | 所有者をそのまま保持する(自分以外の所有者を保持するにはroot権限が必要) |
-D | デバイスファイルや特殊ファイルを保持する(「--devices --specials」相当) | |
--devices | デバイスファイルを保持する(root権限が必要) | |
--specials | 特殊ファイルを保持する | |
短いオプション | 長いオプション | 意味 |
---|---|---|
-H | --hard-links | ハードリンクを保持する |
-A | --acls | ACL(アクセス制御リスト)を保持する(「-p」も同時に指定した扱いになる) |
-X | --xattrs | 拡張属性を保持する |
短いオプション | 長いオプション | 意味 |
---|---|---|
-R | --relative | 相対パス名を使用する |
-d | --dirs | ディレクトリを再帰しない |
-u | --update | 同期先のファイルの方が新しい場合はスキップする |
--inplace | ファイルを上書きする | |
--append | 短いファイルに追加する | |
-b | --backup | バップアップファイルを作成する(ディレクトリや拡張子を指定しなかった場合は「~」を使用) |
--backup-dir=ディレクトリ | バックアップファイルを配置するディレクトリを指定 | |
--suffix=拡張子 | バックアップファイルの拡張子(デフォルトは「~」) | |
--existing | 同期先に新規ファイルを作成しない | |
--ignore-existing | 同期先にファイルがあったらスキップする | |
--remove-source-files | 同期後にファイルを削除する | |
--delete | 同期元にないファイルを同期先から削除する | |
--delete-before | 同期先にないファイルを同期前に削除する | |
--delete-during,--del | 同期先にないファイルを同期中に削除する | |
--delete-delay | 同期中に削除すべきファイルを見つけて、後で削除する | |
--delete-after | 同期先にないファイルを同期終了後に削除する | |
--delete-excluded | 同期から除外したファイルも削除する | |
--ignore-errors | I/Oエラーがあっても削除する | |
--force | ディレクトリが空ではない場合も削除する | |
--max-delete=ファイル数 | 指定した数以上のファイルは削除しない | |
--max-size=サイズ | 指定したサイズより大きなファイルは削除しない | |
--min-size=サイズ | 指定したサイズより小さなファイルは削除しない | |
--exclude=パターン | 指定したパターンにマッチしたファイルは処理しない | |
--exclude-from=ファイル | 除外パターンを指定したファイルから読み込む | |
--include=パターン | 指定したパターンにマッチしたファイルを処理する | |
--include-from=ファイル | 対象パターンを指定したファイルから読み込む | |
--files-from=ファイル | 同期元ファイルのリストを指定したファイルから読み込む | |
-0 | --from0 | 対象リストなどのファイルを改行ではなくヌル文字(\0)で区切る |
短いオプション | 長いオプション | 意味 |
---|---|---|
-L | --copy-links | シンボリックリンクを対象にする |
--safe-links | リンク先が自分の配下にあるものだけを対象にする | |
--copy-unsafe-links | リンク先が自分の配下にないものだけを対象にする | |
-k | --copy-dirlinks | ディレクトリへのリンクの場合もリンク先を転送する |
-K | --keep-dirlinks | ディレクトリへのリンクをたどらない |
-l | --links | シンボリックリンクをシンボリックリンクのままコピーする |
短いオプション | 長いオプション | 意味 |
---|---|---|
-p | --perms | パーミッションを保持する |
-E | --executability | 実行可能属性を保持する |
--chmod=CHMOD | パーミッションを指定する | |
-t | --times | タイムスタンプを保持する |
-O | --omit-dir-times | 「--times」オプション指定時、ディレクトリは除外する |
-g | --group | 所有グループをそのまま保持する |
-o | --owner | 所有者をそのまま保持する(自分以外の所有者を保持するにはroot権限が必要) |
--numeric-ids | ユーザーIDとグループIDを保持する(転送先の名前に対応させない) | |
短いオプション | 長いオプション | 意味 |
---|---|---|
-T | --temp-dir=ディレクトリ | 指定したディレクトリに一時ディレクトリを作成する |
-z | --compress | 転送中のデータを圧縮する |
--compress-level=レベル | データの圧縮レベルを指定する | |
--skip-compress=リストファイル | リストファイルに書かれたファイルは圧縮しない | |
--port=ポート番号 | ポート番号を指定する | |
--sockopts=OPTIONS | TCPオプションを指定する | |
-8 | --8-bit-output | 8ビット以上の文字をエスケープしない |
-h | --human-readable | 数字を読みやすい単位で表示する |
--progress | 転送の進行状況を表示する | |
-P | (「--partial --progress」相当) | |
--partial | 転送を中断したファイルを保持する | |
--partial-dir=ディレクトリ | 転送を中断したファイルを保存するディレクトリ | |
-4 | --ipv4 | IPv4を使用する |
-6 | --ipv6 | IPv6を使用する |
--timeout=秒数 | I/Oタイムアウトの秒数 | |
--iconv=変換方法 | ファイル名の変換方法を指定する(転送元がmacOSの場合は「--iconv=UTF-8-MAC,UTF-8」のように指定) | |
ディレクトリを同期したい場合は、「rsync -av 同期元/ 同期先/」のように指定します。同期先のディレクトリが存在しない場合は、自動的に作成されます。
「-a」は「アーカイブ」を意味するオプションで、サブディレクトリが存在した場合は、「そのディレクトリも処理する(再帰処理)」「パーミッションやファイルのタイムスタンプを保持する」「シンボリックリンクをシンボリックリンクのままコピーする」などの動作となります。
ファイルのサイズとタイムスタンプが同じ場合は「更新されていないファイル」とみなし、コピーから除外されます。チェックサムで比較したい場合は「-c」オプションを併用して、「rsync -acv 〜」のように指定します。「-v」は、動作中の内容を表示するオプションです。
rsync -av 同期元/ 同期先/
(2つのディレクトリを同期する)(画面1)
同期元のディレクトリ末尾の「/」を省略した場合は、同期先のディレクトリの“中”に同期元と同じ名前のディレクトリが作成されます。
例えば、「rsync -av mydata/ backup-mydata/」とした場合は、「mydata」の中にあるファイルやディレクトリが「backup-mydata」ディレクトリの中にコピーされます。
これに対し、「rsync -av mydata backup-mydata/」とした場合は、「backup-mydata」の中に「mydata」ディレクトリが作成されることになります。なお、同期先の末尾の「/」の有無は影響しません。
以下の画面2では、「rsync -av mydata/ 01mydata」(「/」あり)と「rsync -av mydata 02mydata」(「/」なし)の実行結果を比較しています。
異なるホスト間でディレクトリを同期する場合は、同期元や同期先を「ホスト:パス」または「ユーザー名@ホスト:パス」のように指定します(参考:本連載第81回「scpコマンド――リモートマシンとの間でファイルをコピーする」)。
ネットワークの回線速度が遅い環境で大きなファイルを転送する場合は、「-z」オプションで転送データを圧縮するとよいでしょう。
また、大きなファイルを転送している際にエラーとなりやすい場合は「--partial」オプションを指定しておくと、次回のrsyncコマンド実行時に“続き”から再開することができます。「--partial-dir=」オプションでコピー中のファイルを保存する場所を指定しておくことも可能です。
rsync -avz 同期元ホスト名:パス 同期先
(異なるホスト間でディレクトリを同期する)
rsync -avz penguin@otherhost:~/Desktop/ 01desktop
(「otherhost」というホストの「penguin」というユーザーのデスクトップを、「01desktop」にコピーする)
上記の実行例では「192.168.2.4」というホストに対し、現在のログイン名で接続して、自分のデスクトップにあるファイルを「01desktop」というディレクトリにコピーしています(画面3)。
なお、rsyncコマンドの実行前には「ssh」コマンドで「ls -F ~/Desktop」を実行し、デストップにあるファイルを確認しています(参考:本連載第80回「sshコマンド――リモートマシンにログインしてコマンドを実行する」)
【訂正:2018年7月30日午後13時30分】初出時、「その他の主な同期オプション」という表の中で、「--delete 同期先にないファイルを同期先から削除する」とありましたが、正しくは「--delete 同期元にないファイルを同期先から削除する」でした。お詫びして訂正いたします。上記記事は既に訂正済みです(編集部)。
PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.