(Windows の場合は、WinSCP をコマンドラインで利用すると同じようなことを実現できます)。
rsync でディレクトリごとコピーする
rsync
コマンドを使って、src
ディレクトリの内容を dst
ディレクトリにコピーするには下記のように実行します。
$ rsync -av src/ dst # src ディレクトリの「中身」を dst ディレクトリ内へコピー
$ rsync -av src dst # src ディレクトリを dst ディレクトリ内へコピー
-a
オプションは、パーミッションやタイムスタンプなどの情報を維持しつつ、ディレクトリを再帰的にコピーする指定をまとめて行うための archive オプションです。
-v
オプションは転送情報などを出力する verbose オプション。
上記例のように、ソースディレクトリの最後にスラッシュをつけるかつけないかで意味が変わってくるので注意してください。
2番目のように実行すると、結果として ./dst/src
というディレクトリが作成されることになります。
rsync
コマンドはデフォルトでは、コピー先ディレクトリのファイルを削除することはありません。
コピー元 (src
) に存在しないファイルを、コピー先 (dst
) から削除したいときは、明示的に --delete
オプションを付けて実行します。
つまり、2つのディレクトリを同じ内容にしたい(同期したい)のであれば、--delete
オプションを付けて実行する必要があります。
$ rsync -av --delete src/ dst
rsync でリモートホストへディレクトリをコピーする
rsync
コマンドは、リモートホストへのファイルコピーにも対応しています(デフォルトで SSH によるファイルコピーが行われます)。
リモートへのファイルコピーを指示したいときは、ターゲットディレクトリの部分を user@hostname:directory
というフォーマットで指定します。
ディレクトリ名の部分を省略すると、指定したユーザ (user
) のホームディレクトリがコピー先ディレクトリとして使用されます(この場合も、コロン :
は省略できません)。
$ rsync -rv --delete src user@example.com:
上記のようにすると、ローカルディレクトリ (src
) の中のファイルが、リモートホスト (example.com
) のユーザ (user
) のホームディレクトリにコピーされます。
末尾のコロン (:
) を忘れないように注意してください。
これを忘れると、ローカルに user@example.com
という名前のディレクトリができてしまいます。
$ rsync -rv --delete src/ user@example.com:dst
上記のようにすると、ローカルの src
ディレクトリの中身が、リモートの dst
ディレクトリにコピーされます。
src
の後ろにバックスラッシュ (/
) を忘れないように注意してください。
これを忘れると、リモートの dst
ディレクトリの下に src
ディレクトリができてしまいます。
$ rsync -rv --delete src1 src2 src3 user@example.com:dst
上記のようにすると、ローカルの src1
、src2
、src3
ディレクトリを、リモートの ~/dst
ディレクトリへコピーします。
コピー元のディレクトリ名の末尾にスラッシュ (/
) を付けずに実行しているので、リモートの ~/dst
ディレクトリ内に src1
、src2
、src3
ディレクトリがそれぞれ作成されます(ディレクトリ内のファイルがコピーされるのではなく、ディレクトリごとコピーされる)。