【 rsync 】コマンド(その2)――同期元にないファイルを削除する/実行内容を事前に確認する:Linux基本コマンドTips(83)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。前回に続き、今回も「rsync」コマンドを紹介します。
本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。前回に続き、今回もファイルやディレクトリを同期するための「rsync」コマンドを紹介します。
rsyncコマンドとは?
「rsync」は、リモート環境とファイルやディレクトリを「同期(sync)する」というコマンドです。ローカル環境のみでも使用できます。「変更があった分だけ更新する」という機能があるので、ディレクトリ単位のバックアップで特に便利に使えます。
rsyncコマンドの主なオプション
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」でディレクトリを同期する場合は、同期元で変更や追加されたファイルだけが同期先にコピーされます。同期元で削除したファイルを同期先でも削除したい場合は、「--delete」オプションを使用します。
コマンド実行例
rsync -av --delete 同期元/ 同期先/
(同期元で削除したファイルを同期先でも削除する)
以下の画面1は、「mydata」ディレクトリをUSBメモリ(/run/media/ユーザー名/ラベル/mydata)にバックアップしています。
「mydata」に新規ファイル「file3.txt」を作成して「rsync -av」で同期すると、「file3.txt」がUSBメモリにコピーされます。その後、同期元の「mydata」で「file3.txt」を削除して、再度「rsync -av」を実行すると、追加や更新されたファイルは存在しないためコピーは行われていません。
「--delete」オプションを指定した場合、同期元で削除された「file3.txt」が、同期先でも削除されます(画面2)。
コマンドの実行内容を事前に確認する
「-n」オプションを使用すると、“実行されるであろうコマンドの内容”を確認することができます。
コマンド実行例
rsync -av -n 同期元/ 同期先/
rsync -avn 同期元/ 同期先/
(コマンドの実行内容を事前に確認する)
以下の画面3では、「mydata」ディレクトリにある「file1.txt」を更新し、「file4.txt」というファイルを追加した状態でrsyncコマンドを実行しています。
メッセージからは「file1.txt」と「file4.txt」がコピーされることが分かりますが、「-n」オプションを指定しているので実際にはコピーは行われていません。
【訂正: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.