このプロジェクトは pSync に引き継がれました。 今後メンテナンスされないので、pSync を使ってください。
下記特徴を持ったネットワークファイル共有ツールです。
$ msync example.com
MSyncのインストールには動作環境が必要です。 OpenSSHでファイル共有先ホストへログインできる環境とRubyの実行環境、C言語とRuby拡張モジュールのビルド環境のインストールを先に済ませておいてください*6。
MSyncのインストール手順は下記の通りです。 共有元ホストと共有先ホストの両方にインストールが必要です。 wgetの代わりに下記リンクからダウンロードしても良いです。 viは他の使い慣れたテキストエディタを代わりに使っても問題ないです。
$ wget http://kobayasy.com/msync/msync-1.2.tar.gz # 不正改竄確認用チェックサムはここに置いてます
$ tar xzf msync-1.2.tar.gz
$ pushd msync-1.2
$ vi msync # 1行目のrubyコマンドパスを環境に合わせて修正
$ sh install.sh ~/bin # ~/bin の部分はインストール先ディレクトリを指定(省略時は ~/bin を指定した事になる)
$ popd
$ rm -r msync-1.2
C言語とRuby拡張モジュールのビルド環境はMSyncの実行には不要なので、MSyncのインストールが済めば削除*7しても問題ないです。
下記コマンド実行で使い方の説明が表示されます。
$ msync --helpUsage: msync [-cvqn] [REMOTE:][USER@]HOST[/CONFIG[,CONFIG]...] ... msync --status [-q] [CONFIG[,CONFIG]...] ... msync --lock [CONFIG[,CONFIG]...] ... msync --unlock [CONFIG[,CONFIG]...] ... msync --version msync --help REMOTE:USER@HOST/CONFIG HOST hostname USER username (default: current login user) CONFIG configname (default: auto detect) REMOTE remote shell, ssh or rsh (default: ssh) subcommands: --status print configs --lock lock syncpath --unlock unlock syncpath --version print version number --help show this help options: -c, --compress compression for data transfer -v, --verbose increase verbosity -q, --quiet suppress non-error messages -n, --dryrun trial run without actually update files
下記コマンド実行でバージョン情報が表示されます。 共有元と共有先で version が異なっても問題ないですが、protocol は一致していないと動作しません。
$ msync --versionmsync version 1.2 (protocol msync7)
共有ディレクトリはconfignameで指定します。 不正アクセスに対するセキュリティと操作ミスによる意図しないファイル消失を防ぐため、共有ディレクトリの直接指定は出来ないようになっています。
confignameに対応する共有ディレクトリは ~/.msync で登録されていて、配布状態ではconfignameのmsyncが共有ディレクトリ ~/MSync へ登録されているのみですが、複数登録可能でテキストエディタで追加/削除/編集が出来ます。 共有ディレクトリ指定は先頭文字が / の場合は絶対パス指定、そうでない場合は ~ からの相対パス指定と解釈されます。 共有ディレクトリ指定の後に () で囲んでオプション指定が出来ます。 # から行末まではコメントになります。 共有ディレクトリは自動では作成されないので、中は空でも良いので前もって作っておく必要があります。
今の所オプションはexpireのみが指定可能で、過去の共有ファイル状態の記録を保持する期間を expire= に続けて日数単位で指定します。 expireは最長の同期間隔*8以上を余裕を見て設定してください。 デフォルトでは最長でも1年に1回は共有する物としてさらに余裕を見て400日に設定されています。 現存するファイル状態はディレクトリから得られますが、削除されたファイルに付いては過去の記録が必要になります。 それを保持するためのディスク容量と処理をするためのメモリ容量は無限ではないので、保持期間に制限を掛けています。
下記 ~/.msync の例だとconfignameのmsyncに共有ディレクトリ ~/MSync を登録して記録保持期間設定はデフォルトの400日に、docに ~/Public/Document を登録して保持期間を30日に設定しています。
# ~/.msync #configname syncpath (option, ...) msync MSync doc Public/Document (expire=30)
msyncコマンド実行の際、同じhostnameに対する複数のconfignameはまとめて指定可能です。
$ msync guest@example.com/public guest@example.com/privateは
$ msync guest@example.com/public,privateと同じ結果になりますが動作は異なります。 上記はpublicとprivateのそれぞれの共有のために2度ネットワーク接続するのに対して、下記は1度の接続で両方の共有を済ませます。
usernameは共有先のユーザー名が共有元のログイン名と同じ場合は省略可能です。 共有元ホストにユーザー名guestでログインしている状態ならば下記2つは同じ動作になります。
$ msync guest@example.com/public,private
$ msync example.com/public,private
confignameも省略可能で、省略した場合は共有元と共有先で共通のconfigname全てを指定した動作になります。 例えば共有元で登録されている configname が prvate と public, work で共有先が private と work, doc だった場合 private と work を指定したことになり、例えば共有先ホスト名が example.com だった場合、下記2つは同じ動作になります。
$ msync example.com/public,work
$ msync example.com
本ツールの正式名称は頭2文字が大文字でそれ以降が小文字表記の MSync です。 オリジナル配布元は http://kobayasy.com/msync/ になります。
この文章を含めMSyncの配布ファイルは下記ライセンスの元、使用と再配布を許可します。
Copyright (c) 2014-2016 by Yuichi Kobayashi <kobayasy@kobayasy.com>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
その他、作者のメモとか、どうでも良い事とか、実は大事な事とか... いろいろ思い付いたらここに追記。
↓ 同期動作時。 remote stdin は制御動作時と同期動作時とでは違う用途で使われるので排他制御が必要。
ファイル同期のアルゴリズムは下記。
これだけでは、既に存在しないファイルの削除日時をどうやって得てるか? など、不明点がいっぱいだと思うけど、その辺はオープンソースなんだしソースコードを見て欲しい。
$ sshpass -p password msync example.com/msync