メンチカツには醤油でしょ!!

AWS/Java/Node.js/Spreadsheets/Docker/Jenkins/コミュニティ・勉強会レポを主とした技術系ブログ

unisonでファイル同期いろいろ

久しぶりにMacとHDDの同期をしようと思ったのだけど
コピーした時からそれぞれの内容が結構変わっているのは判っていたので、
以前調べてやったunisonをまたやろうとしたんだけど
結構忘れてた+用途が何パターンか出てきたのでメモがてら紹介します。

条件というか前提は
・HDDとMac 内にそれぞれ同期したいディレクトリが複数ある。
 (HDDへのデータ投入はWindowsから実施)
・ディレクトリ配下のファイル数は10,000〜20,000なのでタンポポワークは無理。
Mac側だけ新規ファイルが増えることはないが、Mac側でファイルリネームはしている
 (そのため新規っぽいファイルは一応存在)
といった感じです。

手順の流れはこんな感じを想定してます。
1. HDD⇒Macに完全新規のファイルだけコピー
2. Mac側にてコピーされたファイルを確認
 (リネームファイルはコピーされてしまうため、ここは我慢してタンポポワーク)
3. Mac⇒HDDへMacにて更新(削除)されたファイルを反映
 (この手順の間はHDDに変更ない前提で、完全に同期を取ってしまってOKとする)

 

1. HDD⇒Macに新規ファイルだけコピー

unison -batch -force dir1 dir1 dir2/ -owner -times -group -noupdate dir2/ > result.txt

・プロンプトを表示しない (-batch)
・dir1の内容は変更しない (-force dir1 でdir1をrootに設定)
・dir1⇒dir2のコピーでファイル設定は保持 (dir1 dir2/ -owner -times -group)
・dir2に既に存在しているファイルは上書きしない (-noupdate dir2/)
・画面に出力される結果を result.txt に出力。 ( > result.txt)
これでdir1にしか存在しないファイルがdir2にコピーされました。 
外付けHDDなのかWindowsからなのかわからないけどsudoが必要でした。

2. Mac側にてコピーされたファイルを確認

出力された result.txt を見て頑張る。

出た"頑張る"w 精神論www
でも、頑張るしかないのです。いまのところ。

3. Mac⇒HDDへ、Macにて更新されたファイルをコピー

unison -batch -force dir2 dir2 dir1/ -owner -group -times > result.txt

・dir2を基点としてコピー (-force dir2)
 (なお、ここでforceオプションを指定しないとdir2とdir1にしか存在しないものしか残らなかったような・・・とにかくこの手順では忘れてはいけない)

 

気になり事項

unison にはrsyncのdry-runのようなものはないのだろうか・・・
手順1の実行前にdry-runできれば、手順2のタンポポワークの所が
少し軽減できると思っているんだけどなぁ。。

 

補足というか。

概要部分を具体的にざっくり説明すると、
HDDにバックアップしてある音源をMacに突っ込んでいるんだけど
現場ではseratoでタグ付けやanalyzeすることがあるので、うまいこと同期が取りたい。
でした:D