先日、rsyncを使ったディレクトリのコピーの記事を書いた。
下記のような例だ。
これで、サーバー側の /data/hoge というディレクトリを丸ごと、ローカルのカレントディレクトリ以下にコピーできる。しかも、ローカルに同一のファイルが存在する場合にはそのファイルはコピーしないので、サーバー側のデータを追加していった場合には、2度目以降のコピーでは追加されたファイルだけを転送することになり、とても効率的だ。
しかし、この方法では、サーバー側でファイルが消された場合については対応していない。一度上記の方法でディレクトリをコピーしたとする。その後、サーバー側で不要なファイルを消去し、一部のファイル名を変更したとする。そしてもう一度上記コマンドでコピーを実行すると、追加されたファイルや、ファイル名が変更されたファイルだけが転送されるという意味では問題ないが、サーバー側で消去された元のファイルは、ローカル側には消されずに残ることになる。
この動作が必要な場合もあるが、ミラーリング(サーバーとローカルの内容を同じにすること)を意図している場合、これでは不適切である。
ミラーリングするには、サーバーに存在しないファイルをローカルから消去すればよい。そのためには --del オプションを指定すればよい。
これでミラーリングO.K.。
すこしずつ知識が増える自分であった(が、実際には頭には残っていない)。
下記のような例だ。
rsync -av --rsh=ssh server:/data/hoge ./
これで、サーバー側の /data/hoge というディレクトリを丸ごと、ローカルのカレントディレクトリ以下にコピーできる。しかも、ローカルに同一のファイルが存在する場合にはそのファイルはコピーしないので、サーバー側のデータを追加していった場合には、2度目以降のコピーでは追加されたファイルだけを転送することになり、とても効率的だ。
しかし、この方法では、サーバー側でファイルが消された場合については対応していない。一度上記の方法でディレクトリをコピーしたとする。その後、サーバー側で不要なファイルを消去し、一部のファイル名を変更したとする。そしてもう一度上記コマンドでコピーを実行すると、追加されたファイルや、ファイル名が変更されたファイルだけが転送されるという意味では問題ないが、サーバー側で消去された元のファイルは、ローカル側には消されずに残ることになる。
この動作が必要な場合もあるが、ミラーリング(サーバーとローカルの内容を同じにすること)を意図している場合、これでは不適切である。
ミラーリングするには、サーバーに存在しないファイルをローカルから消去すればよい。そのためには --del オプションを指定すればよい。
rsync -av --del --rsh=ssh server:/data/hoge ./
これでミラーリングO.K.。
すこしずつ知識が増える自分であった(が、実際には頭には残っていない)。
※コメント投稿者のブログIDはブログ作成者のみに通知されます