この記事を読むと・・・ |
---|
コピー元の状態とコピー先の差分をコピーする方法が理解できる 指定したファイルやディレクトリをコピーする方法が理解できる |
目次
rsyncコマンド基本オプション
基本的なオプションは以下の表の通りです。
短縮オプション | オプション | 説明 |
---|---|---|
-r | –recursive | ディレクトリを再帰的に処理する |
-l | –links | シンボリックリンクをシンボリックリンクのままコピーする |
-p | –perms | パーミッション情報を保持する |
-t | –times | タイムスタンプ情報を保持する |
-g | –group | 所有グループ情報をそのまま保持する |
-o | –owner | 所有者情報をそのまま保持する※自分以外の所有者情報を保持するにはroot権限が必要 |
-D | –devices –specials | デバイスファイルや特殊ファイルを保持する |
-a | –archive | 上記のオプションをすべて含んだ-rlptgoD と同じ |
-v | –verbose | 実行内容を表示する |
-n | –dry-run | 実際の処理は行わず、実行内容だけ表示する(テスト) |
なし | –delete | コピー元にないファイルを同期先から削除する |
なし | –delete-excluded | コピー対象から除外したファイルも削除する |
なし | –exclude=パターン | 指定したパターンに該当したファイルは処理しない |
なし | –include=パターン | 指定したパターンに該当したファイルを処理する |
なし | –stats | ファイル数、転送サイズを表示する |
rsyncコマンドで階層的にファイル・ディレクトリをコピーする方法
以下のオプションを用いることでrsync
コマンドでファイル・ディレクトリをコピーすることができます。
rsync -av --delete 【コピー元】 【コピー先】
コピー元のディレクトリ『/tmp/infra』、コピー先のディレクトリ『/data』を利用し、実際に実行してみると以下のようになります。
実施した概要を以下にメモします。
ls -lR
コマンドでコピー元のディレクトリ構成を確認する。ls -lR
コマンドでコピー先のディレクトリ構成を確認する。rsync
コマンドのオプションに-n
を追加し、実行することでテスト的に実行できるので想定通りか確認する。- 実際に
rsync
コマンドを実行し、ファイル・ディレクトリをコピーする。 - コピー先にファイル・ディレクトリにコピーされていることを確認する。
# ls -lR /tmp/infra/
/tmp/infra/:
合計 0
drwxr-xr-x 2 root root 6 9月 2 15:40 script
drwxr-xr-x 3 root root 37 9月 2 17:00 work
/tmp/infra/script:
合計 0
/tmp/infra/work:
合計 0
drwxr-xr-x 2 root root 23 9月 2 17:01 TEST01
-rw-r--r-- 1 root root 0 9月 2 15:40 test1.txt
/tmp/infra/work/TEST01:
合計 0
-rw-r--r-- 1 root root 0 9月 2 17:01 test2.txt
# ls -lR /data
/data:
合計 0
# rsync -avn --delete /tmp/infra /data
sending incremental file list
infra/
infra/script/
infra/work/
infra/work/test1.txt
infra/work/TEST01/
infra/work/TEST01/test2.txt
sent 233 bytes received 38 bytes 542.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
# rsync -av --delete /tmp/infra /data
sending incremental file list
infra/
infra/script/
infra/work/
infra/work/test1.txt
infra/work/TEST01/
infra/work/TEST01/test2.txt
sent 309 bytes received 74 bytes 766.00 bytes/sec
total size is 0 speedup is 0.00
# ls -lR /data
/data:
合計 0
drwxr-xr-x 4 root root 32 9月 2 17:03 infra
/data/infra:
合計 0
drwxr-xr-x 2 root root 6 9月 2 15:40 script
drwxr-xr-x 3 root root 37 9月 2 17:00 work
/data/infra/script:
合計 0
/data/infra/work:
合計 0
drwxr-xr-x 2 root root 23 9月 2 17:01 TEST01
-rw-r--r-- 1 root root 0 9月 2 15:40 test1.txt
/data/infra/work/TEST01:
合計 0
-rw-r--r-- 1 root root 0 9月 2 17:01 test2.txt
rsyncコマンドでディレクトリのみコピーする方法
以下のオプションを用いることでrsync
コマンドでディレクトリのみをコピーすることができます。
rsync -av --delete --include "*/" --exclude "*" 【コピー元】 【コピー先】
コピー元のディレクトリ『/tmp/app』、コピー先のディレクトリ『/data』を利用し、実際に実行してみると以下のようになります。
実施した概要を以下にメモします。
ls -lR
コマンドでコピー元のディレクトリ構成を確認する。ls -lR
コマンドでコピー先のディレクトリ構成を確認する。rsync
コマンドのオプションに-n
を追加し、実行することでテスト的に実行できるので想定通りか確認する。- 実際に
rsync
コマンドを実行し、ディレクトリのみをコピーする。 - コピー先にディレクトリのみがコピーされていることを確認する。
# ls -lR /tmp/app
/tmp/app:
合計 0
drwxr-xr-x 2 root root 6 9月 2 15:40 data
drwxr-xr-x 2 root root 6 9月 2 15:40 infra
drwxr-xr-x 3 root root 37 9月 2 15:43 nosync
drwxr-xr-x 2 root root 6 9月 2 15:40 script
drwxr-xr-x 3 root root 71 9月 2 15:41 work
/tmp/app/data:
合計 0
/tmp/app/infra:
合計 0
/tmp/app/nosync:
合計 0
drwxr-xr-x 2 root root 6 9月 2 15:43 TEST02
-rw-r--r-- 1 root root 0 9月 2 15:43 test5.txt
/tmp/app/nosync/TEST02:
合計 0
/tmp/app/script:
合計 0
/tmp/app/work:
合計 0
drwxr-xr-x 2 root root 23 9月 2 15:41 TEST01
-rw-r--r-- 1 root root 0 9月 2 15:40 test1.txt
-rw-r--r-- 1 root root 0 9月 2 15:40 test2.txt
-rw-r--r-- 1 root root 0 9月 2 15:40 test3.txt
/tmp/app/work/TEST01:
合計 0
-rw-r--r-- 1 root root 0 9月 2 15:41 test4.txt
# ls -lR /data
/data:
合計 0
# rsync -avn --delete --include "*/" --exclude "*" /tmp/app /data
sending incremental file list
app/
app/data/
app/infra/
app/nosync/
app/nosync/TEST02/
app/script/
app/work/
app/work/TEST01/
sent 282 bytes received 48 bytes 660.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
# rsync -av --delete --include "*/" --exclude "*" /tmp/app /data
sending incremental file list
app/
app/data/
app/infra/
app/nosync/
app/nosync/TEST02/
app/script/
app/work/
app/work/TEST01/
sent 282 bytes received 48 bytes 660.00 bytes/sec
total size is 0 speedup is 0.00
# ls -lR /data
/data:
合計 0
drwxr-xr-x 7 root root 71 9月 2 15:43 app
/data/app:
合計 0
drwxr-xr-x 2 root root 6 9月 2 15:40 data
drwxr-xr-x 2 root root 6 9月 2 15:40 infra
drwxr-xr-x 3 root root 20 9月 2 15:43 nosync
drwxr-xr-x 2 root root 6 9月 2 15:40 script
drwxr-xr-x 3 root root 20 9月 2 15:41 work
/data/app/data:
合計 0
/data/app/infra:
合計 0
/data/app/nosync:
合計 0
drwxr-xr-x 2 root root 6 9月 2 15:43 TEST02
/data/app/nosync/TEST02:
合計 0
/data/app/script:
合計 0
/data/app/work:
合計 0
drwxr-xr-x 2 root root 6 9月 2 15:41 TEST01
/data/app/work/TEST01:
合計 0
rsyncコマンドで特定のディレクトリ階層を除いてコピーする方法
やっていることはディレクトリのみをコピーする方法と同じです。
--exclude="ディレクトリパス(コピー元からの相対パス)"
のオプションを利用することで特定のディレクトリ階層のファイルやディレクトリをコピーの対象から除くことができます。
rsync -av --delete --exclude "【ディレクトリパス(コピー元からの相対パス)】" 【コピー元】 【コピー先】
コピー元のディレクトリ『/tmp/develop』、コピー先のディレクトリ『/data』を利用し、除外対象のディレクトリとして『/tmp/develop/nosync』を指定し、実際に実行してみると以下のようになります。
実施した概要を以下にメモします。
ls -lR
コマンドでコピー元のディレクトリ構成を確認する。ls -lR
コマンドでコピー先のディレクトリ構成を確認する。rsync
コマンドのオプションに-n
を追加し、実行することでテスト的に実行できるので想定通りか確認する。- 実際に
rsync
コマンドを実行し、除外条件に該当するもの以外をコピーする。 - コピー先に除外条件に該当するもの以外がコピーされていることを確認する。
# ls -lR /tmp/develop
/tmp/develop:
合計 0
drwxr-xr-x 3 root root 37 9月 2 17:09 nosync
drwxr-xr-x 3 root root 37 9月 2 17:00 work
/tmp/develop/nosync:
合計 0
drwxr-xr-x 2 root root 6 9月 2 17:08 TEST02
-rw-r--r-- 1 root root 0 9月 2 17:08 test3.txt
/tmp/develop/nosync/TEST02:
合計 0
/tmp/develop/work:
合計 0
drwxr-xr-x 2 root root 23 9月 2 17:01 TEST01
-rw-r--r-- 1 root root 0 9月 2 15:40 test1.txt
/tmp/develop/work/TEST01:
合計 0
-rw-r--r-- 1 root root 0 9月 2 17:01 test2.txt
# ls -lR /data
/data:
合計 0
# rsync -avn --delete --exclude "nosync/" /tmp/develop /data
sending incremental file list
develop/
develop/work/
develop/work/test1.txt
develop/work/TEST01/
develop/work/TEST01/test2.txt
sent 202 bytes received 34 bytes 472.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
# rsync -av --delete --exclude "nosync/" /tmp/develop /data
sending incremental file list
develop/
develop/work/
develop/work/test1.txt
develop/work/TEST01/
develop/work/TEST01/test2.txt
sent 278 bytes received 70 bytes 696.00 bytes/sec
total size is 0 speedup is 0.00
# ls -lR /data
/data:
合計 0
drwxr-xr-x 3 root root 18 9月 2 17:08 develop
/data/develop:
合計 0
drwxr-xr-x 3 root root 37 9月 2 17:00 work
/data/develop/work:
合計 0
drwxr-xr-x 2 root root 23 9月 2 17:01 TEST01
-rw-r--r-- 1 root root 0 9月 2 15:40 test1.txt
/data/develop/work/TEST01:
合計 0
-rw-r--r-- 1 root root 0 9月 2 17:01 test2.txt