読者です 読者をやめる 読者になる 読者になる

WinSCPでWindowsとLinuxのファイルを同期させる。

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にしているらしい。なお、パスワードは平文でそのまま書いてもだめで、一度WinSCPGUIで起動してセッション情報と一緒にパスワードを保存してそこからコピーしてきました。結構長い文字列に変換されます。

次はスクリプトファイル。今回は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

とするとちゃんと表示されました。なんだこれ。