【 rsync 】コマンド(その2)――同期元にないファイルを削除する/実行内容を事前に確認するLinux基本コマンドTips(83)

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。前回に続き、今回も「rsync」コマンドを紹介します。

» 2017年02月03日 05時00分 公開
[西村めぐみ@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。前回に続き、今回もファイルやディレクトリを同期するための「rsync」コマンドを紹介します。

rsyncコマンドとは?

 「rsync」は、リモート環境とファイルやディレクトリを「同期(sync)する」というコマンドです。ローカル環境のみでも使用できます。「変更があった分だけ更新する」という機能があるので、ディレクトリ単位のバックアップで特に便利に使えます。



rsyncコマンドの書式

rsync [オプション] 同期元 [同期先]

※[ ]は省略可能な引数を示しています



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」でデーモン時に使用できるオプションが確認できる)

●「-a」で有効になるオプション
短いオプション 長いオプション 意味
-r --recursive ディレクトリを再帰的に処理する
-l --links シンボリックリンクをシンボリックリンクのままコピーする
-p --perms パーミッションを保持する
-t --times タイムスタンプを保持する
-g --group 所有グループをそのまま保持する
-o --owner 所有者をそのまま保持する(自分以外の所有者を保持するにはroot権限が必要)
-D デバイスファイルや特殊ファイルを保持する(「--devices --specials」相当)
--devices デバイスファイルを保持する(root権限が必要)
--specials 特殊ファイルを保持する

●「-a」で無効になるオプション
短いオプション 長いオプション 意味
-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)にバックアップしています。

画面1 画面1 rsyncコマンドを「-av」オプション付きで実行すると、同期元で変更や追加されたファイルだけが同期先にコピーされる

 「mydata」に新規ファイル「file3.txt」を作成して「rsync -av」で同期すると、「file3.txt」がUSBメモリにコピーされます。その後、同期元の「mydata」で「file3.txt」を削除して、再度「rsync -av」を実行すると、追加や更新されたファイルは存在しないためコピーは行われていません。

 「--delete」オプションを指定した場合、同期元で削除された「file3.txt」が、同期先でも削除されます(画面2)。

画面2 画面2 rsyncコマンドを「--delete」オプション付きで実行すると、同期元で削除されたファイルが同期先でも削除される


コマンドの実行内容を事前に確認する

 「-n」オプションを使用すると、“実行されるであろうコマンドの内容”を確認することができます。

コマンド実行例

rsync -av -n 同期元/ 同期先/

rsync -avn 同期元/ 同期先/

(コマンドの実行内容を事前に確認する)


 以下の画面3では、「mydata」ディレクトリにある「file1.txt」を更新し、「file4.txt」というファイルを追加した状態でrsyncコマンドを実行しています。

画面3 画面3 rsyncコマンドを「-n」オプション付きで実行すると、実際にはコピーは行われないので、事前にコマンドの実行内容を確認できる

 メッセージからは「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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。