rsync コマンド 2014/10/25
リモートホストとの間でファイルのコピー(アップロード/ダウンロード)をするコマンド。リモートホストとはSSHで通信できることが前提。
基本的な使い方 2013/10/23
## リモートホストからローカルにダウンロードする
$ rsync «リモートユーザ名»@«リモートホスト名»:/«絶対パス» «ローカルパス»
## リモートホストからローカルにダウンロードする
## リモートでのパスはリモートのホームディレクトリからの相対パスでもよい
$ rsync «リモートユーザ名»@«リモートホスト名»:«相対パス» «ローカルパス»
## ポート番号が22以外の場合
$ rsync -e "ssh -p «ポート番号»" «リモートユーザ名»@«リモートホスト名»:/«絶対パス» «ローカルパス»
## 秘密鍵のファイルを指定する場合
$ rsync -e "ssh -i «秘密鍵ファイル名»" «リモートユーザ名»@«リモートホスト名»:/«絶対パス» «ローカルパス»
リモートからローカルへのダウンロード、またはローカルからリモートへのアップロードが可能だが、リモートから別のリモートへの転送はできない。
ディレクトリの指定方法 2015/03/16
コピー元としてディレクトリを指定する場合、最後に /
を付けるかどうかで動作が異なってくる。
ローカルに foo/bar/hello.txt
というファイルがあった場合、
rsync -r foo/bar remote:dst
と書くと、foo/bar
ディレクトリ自体がコピーされる、というイメージになるので、
remote
ホストには dst/bar
というディレクトリが作られ、
dst/bar/hello.txt
というパスにファイルがコピーされる。
rsync -r foo/bar/ remote:dst
と書くと、foo/bar
ディレクトリの中身がコピーされる、というイメージになり、
remote
ホストには dst/hello.txt
というパスにファイルがコピーされる。
オプション 2016/03/07
-a
-rlptgoD
と同じ--bwlimit
- ネットワーク帯域を制限して転送する。-> ゆっくり転送するには
--copy-links
- シンボリックリンクはリンク先の中身を転送
-g
- グループもコピー
-l
,--links
- シンボリックリンクをシンボリックリンクとして転送
-o
- ファイルオーナーもコピー (root権限でのみ可)
-p
- パーミッションも保存。タイムスタンプも保存するには
-t
が必要。cp
コマンドでは-p
でタイムスタンプも保存してくれるが。 --progress
- コピーの進捗を表示
-r
- ディレクトリの場合はその中を再帰的にコピー
-t
- タイムスタンプも保存
-u
- タイムスタンプが新しいファイルのみをコピー
-v
- コピーするファイル名を、進捗に合わせて表示
-z
- ネットワーク上を転送する前後に圧縮と解凍の処理を入れて、ネットワークを節約する。たぶん代わりにCPU使用率があがる。
HOWTO
ローカルにあるファイルをディレクトリ名も含めてリモートにアップロードするには 2013/10/14
rsync -R abc/def/ghi.dat remote:/home/who/
この場合、リモートには /home/who/ghi.dat
ではなく /home/who/abc/def/ghi.dat
という名前でアップロードされる。リモートにディレクトリが存在しない場合は自動で作成される。
cp
での同じ役割をはたすのは --parents
。
ポートが22以外のSSHサーバにrsyncで接続するには 2014/08/26
リモートからダウンロードする場合
$ rsync -e "ssh -p <port>" <ID>@<IP>:<remote_path> <local_path>
リモートにアップロードする場合
$ rsync -e "ssh -p <port>" <local_path> <ID>@<IP>:<remote_path>
進捗を表示するには 2013/12/05
転送の進捗をリアルタイムに表示させるには、--progress
オプションを使う。プログレスバーのようなビジュアルでの表示ではなく、単に数値で表示するのはちょっと残念。
リモートのファイルをローカルに保存するのではなく、標準出力させて別のコマンドにパイプでつなぐには 2014/01/29
rsync
で標準出力させる方法が見つからなかったが、ssh
で以下のようにすればよい。
ssh remote "cat abc.txt" | less
ネットワークの帯域を絞ってゆっくり転送するには 2014/08/26
時間がかかってもよいからネットワークの負荷をかけずにゆっくりダウンロードまたはアップロードするには
--bwlimit
オプションを使う。このオプションで指定する数字の単位はKBps(キロバイト毎秒であってキロビット毎秒ではない)。
例
# 毎秒100KBに制限してダウンロード
rsync --bwlimit=100 remote:foo.txt ./