WinSCPでWindowsとLinuxのファイルを同期させる。
前提として先日EUC-JPにしたSambaの設定や玄箱Pro(debian)のローケル設定をUTF-8に統一しなおしました。
WinSCPは基本Shift-JISを扱うが、オプションの設定でUTF-8を有効にできるらしい。ということで玄箱Proで扱う文字コードをUTF-8に変更する。
apt-getしてるのは、なんか必要あるというサイトもあったのでインストールしておいた。
# apt-get install language-env ja-trans manpages-ja jless # dpkg-reconfigure locales
WinSCPではコマンドライン上から設定ファイルやスクリプトファイルを使って同期させることができる。まずは設定ファイルを作成する。今回はsync.iniという名前で以下のような内容を作成。
[Sessions\%セッション名%] HostName=%ホスト名% UserName=%ユーザ名% Password=%パスワード% Utf=1
最後のUtf=1でWinSCPで扱う文字コードをUTF-8にしているらしい。なお、パスワードは平文でそのまま書いてもだめで、一度WinSCPをGUIで起動してセッション情報と一緒にパスワードを保存してそこからコピーしてきました。結構長い文字列に変換されます。
次はスクリプトファイル。今回はsync.scriptという名前で以下のような内容を作成。
cd %Linux側ディレクトリ% lcd "%Windows側フォルダ%" synchronize remote -delete -criteria=time close exit
順に、Linuxのカレントディレクトリを変更。Windowsのフォルダを変更。ローカル側(Windows側)を基準にリモート側(Linux側)のファイルを変更する、その際ローカルになく、リモートにあるファイルは削除し、同じファイル名が存在した場合タイムスタンプを比較する。セッションを閉じる。winscpを抜ける。という感じ。
一度コンソール上から接続してiniファイルに接続先の情報を登録しないとスクリプトで動作できない模様。
というわけで一度コンソール上で接続してあげる。
# winscp419 %セッション名% /ini=sync.ini /console
接続先の情報を登録するかという質問が出るので承諾したらclose→exitでwinscpコンソールを抜ける。
次からはスクリプトファイルで自動的に同期できます。
# winscp419 %セッション名% /ini=sync.ini /script=sync.script
と実行すると同期が始まる。同期中はwinscpがバックグラウンドで動作するらしく、コマンドプロンプトにはちゃんとプロンプトが返り別の操作が可能な模様。逆にどうやって止めるかが不明というワナ。
しかし、3GB程度の転送で1時間以上かかるってのはちょっといただけない。まぁ、一回転送しておけば後は変更分だけだからそんなに時間かからないかもだけど。
作業中に気づいたけど、玄箱ProではGNU/screenのキャプションの曜日表示が文字化けしてる。FreeBSDだと大丈夫なのに。
# LANG=ja_JP.UTF-8 screen-UxR
とするとちゃんと表示されました。なんだこれ。