バックアップと同期 (Linux他)

Linuxその他では、rsync を使う

基本的な使い方は下記になると思います。というか、これ以外あまりしたことない。-v -h は表示に関するオプションなので特に必要ない。

>> rsync -avh /src/ /dest

気を付ける点は、コピー元(/src/)の指定の仕方。最後のディレクトリ区切り、スラッシュを付けるか、付けないかで挙動が変わる。
通常は最後のスラッシュを付ける。というか、ローカル内のコピーで、付けない場合の用途が僕には思いつかない。
複数のディレクトリを一つのディレクトリに集めるとかの場合は、スラッシュを付けない。

また、ローカルではなくリモートホストにまたがる場合は、-z で圧縮転送を指定するほうが効率的なのかも。

src1,src2,src3 をdestディレクトリにまとめたい

> rsync -avh /mnt/a/src1 /mnt/b/src2 /mnt/c/src3 /mnt/dest

こうすると、/mnt/dest ディレクトリに集められる。しかし、ローカルだけでこんなことするケースが思いつかない・・・
複数のリモートホストの特定ディレクトリを一つにまとめるとか、かな???
コピー先のスラッシュの有り無しは特に意味を持たない。

また、コピー元、コピー先にリモートホストを指定する場合は、–no-o,–no-p,–no-g 等を適宜つけ、パーミッション、オーナー情報等をコピーしないようにする必要があるかも。

ディレクトリ構造のみのコピー

 
> rsync -a --include "*/" --exclude "*" src/ dest

コピー元のディレクトリ構造のみが欲しい、ということが種々のバックアップ用途では多々あります。その際は、上記のようにすればいいらしい。

使い勝手は悪いが、findとmkdirを使うことも可能。

> find src -type d -print0 | xargs --null -n9 -I{} mkdir -p "dest/{}"

もしくは、findだけでもいいかもしれない。

> find src -type d -exec mkdir -p "dest/{}" \;