2012年11月22日木曜日

UNIXちょっと知識 - rsync

複数のパソコンを使っている場合,ファイルの同期をどうするかというのは結構大事な問題です.

で,大体のひとはDropBoxとか,icloudとか,skydriveとか,Sugarsyncとか使っていると思います.ぼくも使ってます. ただ,これらの商業ベースの同期ソフトというのはたいてい転送速度とか容量が制限されてます.

iTunesライブラリは,複数PC間でそのまま同期したい需要が結構あるんじゃないかと思うんですが容量大きいから同期ソフト使えなかったり,いちいち更新分だけコピーするのもめんどいし,じゃあネットワーク越しのシンボリックリンクとかで対応しようとするとオフラインで使えないしっていう問題が出てきます.ずっとネットにつながってるような環境だったらいいとおもうんですけども.

そこで今回は,UNIXコマンド,rsyncのご紹介です.

rsyncはフォルダの変更を差分で同期してくれるプログラムで,ネットワーク越しに使うと容量関係なくパソコン間で直接的な同期を行なってくれます.

たとえばメインで音楽管理してるPCとしてパソコンAがあるとしましょう.A上のフォルダを今使ってるパソコンBからどこでもMyMac的な何かを利用してローカルにマウントすると/Volumes/以下にマウントされると思います.たとえば/Volume/MusicServer的な感じで.で,AのiTunesフォルダに/Volumes/MusicServer/iTunesとしてアクセスできるようになったとします.

ここで,BのiTunesフォルダにAのをそのまま引っ張りたかったら以下みたいなコマンドでいけます.
$ rsync -avr /Volumes/MusicServer/iTunes/ ~/Music/iTunes/
最初の一回は上書き全コピになりますから時間はかかりますけど,2回目以降は差分だけになって転送は速いです.

逆にBで更新した分をAにプッシュしたかったら逆にすればよいですね.
$ rsync -avr ~/Music/iTunes/ /Volumes/MusicServer/iTunes/
容量的な問題で動画データはこっちにいらないとかあったら,excludeオプションを使えば良いです.
$ rsync -avr --exclude="*.mp4" /Volumes/MusicServer/iTunes/ ~/Music/iTunes/

応用で、sshでローカルポート50000につないでるサーバーにプッシュしたい場合、
$sudo rsync -avr -e 'ssh -p 50000 -c arcfour' ~/Music/iTunes/ username@localhost:"~/Music/iTunes/"
引き出したい場合、
$sudo rsync -avr  -e 'ssh -p 50000 -c arcfour'  username@localhost:"~/Music/iTunes/" ~/Music/iTunes/
など。( -c arcfour はsshの暗号オプションで、無くてもできますがarcfourが一番早いです)
これやりたい場合は、サーバー側のポート22に繋げる必要があるので注意。

あと、オプションとして --delete をつけると引き出される側で無いファイルはこっちでも削除されます。
-u をつけると同じファイルが有った場合、更新日時がより新しいものだけ転送されます。
他にもオプションが多くあるのでここらへんをご参考まで.

Automatorとか使うと自動化できるみたいですけど詳しく知らないので誰かご研究対象にしてくださると助かります.あとこれでもともとあった大事なファイル消えても私の方で責任はとりかねますので始める際には書き換え先のバックアップ取っときましょう.おしまい.

0 件のコメント :

コメントを投稿