【 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.


