Tera Termマクロによるファイルの送信と受信

2016/08/11

Tera Termではscp機能が使用できるが、Tera Termマクロのscp受信コマンド scprecv とscp送信コマンド scpsend で同機能が使える。
通常はバッチファイルからSFTPを自動で実行するで書いたWinSCPを使用してファイルダウンロードする方が簡単かつメリットがあるが、Tera Termマクロの柔軟な機能を使用したい時などは、Tera Termマクロ + WinSCPよりもTera Termマクロだけで完結させた方がシンプルになる。
※WinSCP側のメリット
・Tera Termと違って受信機能が同期で動くため、受信完了のタイミングを考えなくてもよい。
・サーバへのログインパスワードがWinSCP側で保存でき、平文でスクリプトファイルに書く必要がない。

それではTera Termマクロを使用した、サーバと端末間でのファイルの送受信方法の解説を行う。

目次

サーバから端末へのダウンロード方法その1

WinSCP側のメリットで書いた通り、Tera Termマクロでは受信機能が非同期で動くため、受信完了のタイミングを考えなくては上手くダウンロードができない。

受信が完了したと判断するロジックを、ここでは次のようにする。
1秒ごとに端末のファイルサイズを確認し、変動がなくなれば完了とする

サンプルとして、サーバの/tmp/sample.csvを端末のC:\work\にダウンロードするTera Termマクロを、このロジックを使って書き、バッチから呼び出す。

callscpresv.bat

scprecv.ttl

サーバから端末へのダウンロード方法その2

受信が完了したと判断するロジックを、方法その1より洗練させ、次のようにする。
scp中のサーバのプロセスを確認し、プロセスが消えれば完了とする

端末がファイルを受信する scprecv コマンドを実行すると、サーバでは scp -f scprecvの第一引数(remotepath というプロセスが動く。ps -efをgrepしてマッチした行数をgrepの-cオプションで表示し、表示が「0」になったらプロセスが消えたと判断する。

お題は方法その1と全く同じとして、 scprecv.ttl のファイル受信部分のみ、今回のロジックを使い以下に変更する。

サーバのプロセスを見て判断しているため、端末でのファイルサイズ確認よりネットワーク状況等の都合を受けず、安定して受信完了を判定できる。

端末からサーバへのアップロード方法

受信方法について説明してきたので、次は送信方法について書きたい。

送信も受信と同様、Tera Termマクロでは非同期で動くため、送信完了のタイミングを考えなくては上手くアップロードができない。

送信完了を判定するロジックは、ダウンロード方法その2と同様に考えればよい。
scp中のサーバのプロセスを確認し、プロセスが消えれば完了とする

送信用コマンド scpsend を実行すると、サーバでは scp -t scpsendの第二引数(remotepath というプロセスが動く。

localpath と remotepath に前回までと同様に適切なファイルパスが入っているとして、localpath にあるファイルを remotepath にアップロードするサンプルを、ファイル送信部分に絞って以下に記載する。

-Windows
-