WinSCPをコマンドで操作する方法

WinSCPをコマンドで操作する方法

WinSCPは、SFTP/FTPS/SCPに対応した定番のファイル転送ツールです。WinSCPはGUIでの操作が一般的ですが、コンソールモードでのコマンドによる操作機能や、スクリプト機能(バッチ処理機能)も備えています。

コンソールモードでは「open」「get」「put」などのコマンドで、ファイルの送受信やディレクトリ作成などの処理を実⾏できます。また、WinSCPのコマンドはLinuxなどのftpコマンドと似たコマンド体系となっているため、これらに慣れている方であればすぐに使いこなせると思います。

ここでは、WinSCPバージョン5.1.3を使って、基本的なコマンド操作方法を紹介します。

コンソールモードの起動

コマンドプロンプトで、WinSCPのインストールフォルダーにある「WinSCP.com」を実⾏すると、WinSCPがコンソールモードで起動します。

WinSCPをコマンドで操作する方法

コンソールモードで利用可能なコマンドの一覧は、以下のとおりです。

WinSCPをコマンドで操作する方法

使用可能なコマンドは、以下の公式ホームページでも確認できます。

http://winscp.net/eng/docs/scripting#commands

コンソールモードでの操作例

リモートマシンへログイン

たとえば「192.168.1.100」というホストに「hoge」というユーザーでログインする手順は、次のとおりです。

winscp> open hoge@192.168.1.100

サーバを探索中・・・
サーバに接続しています・・・
認証しています・・・
ユーザ名"hoge" を使用中
パスワード(P):*********
認証されました
セッションを開始しています・・・
セッションを開始しました
アクティブ セッション: [1] hoge@192.168.1.100

ファイルのダウンロード

たとえば、リモートディレクトリ「/home/hoge/temp」内にあるすべてのdatファイル(拡張⼦が.datのファイル)を、ローカルディレクトリ「E:myfolder」にダウンロード(get)する手順は、次のとおりです。

winscp> cd temp
/home/hoge/temp

winscp> ls
drwxrwxr-x 2 hoge hoge 4096 Apr 12 5:30:01 2018 .
drwx------ 3 hoge hoge 95 Apr 12 5:29:39 2018 ..
-rw-r--r-- 1 hoge hoge 10485760 Apr 12 5:30:01 2018 10m_1.dat
-rw-r--r-- 1 hoge hoge 10485760 Apr 12 5:30:01 2018 10m_2.dat
-rw-r--r-- 1 hoge hoge 10485760 Apr 12 5:30:01 2018 10m_3.dat
-rw-r--r-- 1 hoge hoge 10485760 Apr 12 5:30:01 2018 10m_4.dat
-rw-r--r-- 1 hoge hoge 10485760 Apr 12 5:30:01 2018 10m_5.dat

winscp> lcd E:myfolder
E:myfolder

winscp> get *.dat
10m_1.dat | 10240 KB | 27221.4 KB/s | binary | 100%
10m_2.dat | 10240 KB | 28479.1 KB/s | binary | 100%
10m_3.dat | 10240 KB | 29338.4 KB/s | binary | 100%
10m_4.dat | 10240 KB | 30116.3 KB/s | binary | 100%
10m_5.dat | 10240 KB | 30330.8 KB/s | binary | 100%

ファイルのアップロード

たとえば、ローカルディレクトリ「E:myfolder」内にあるすべてのpngファイル(拡張⼦が.pngのファイル)を、リモートディレクトリ「/home/hoge/temp」にアップロード(put)する手順は、次のとおりです。

winscp> lcd E:myfolder
E:myfolder

winscp> lls *.png
2018/04/12  05:30        10,485,760 10m_41.png
2018/04/12  05:30        10,485,760 10m_42.png
2018/04/12  05:30        10,485,760 10m_43.png
2018/04/12  05:30        10,485,760 10m_44.png
2018/04/12  05:30        10,485,760 10m_45.png

winscp> cd temp
/home/hoge/temp

winscp> put *.png
10m_41.png                |       10240 KB | 34486.6 KB/s | binary | 100%
10m_42.png                |       10240 KB | 37450.6 KB/s | binary | 100%
10m_43.png                |       10240 KB | 37062.8 KB/s | binary | 100%
10m_44.png                |       10240 KB | 36905.3 KB/s | binary | 100%
10m_45.png                |       10240 KB | 37213.1 KB/s | binary | 100%

ディレクトリの同期

「synchronize」コマンドを使用すると、ローカルディレクトリとリモートディレクトリの内容を⽐較し、更新されたファイルのみを転送することができます。

たとえば、ローカルディレクトリ「E:myfolderwork」と、リモートディレクトリ「/home/hoge/temp/work」を比較し、リモートディレクトリ側を更新する手順は、次のとおりです。

Memo

リモートディレクトリ側を更新するには、以下のようにコマンドを実行します。
synchronize remote <ローカルディレクトリ> <リモートディレクトリ>
ローカルディレクトリ側を更新するには、以下のようにコマンドを実行します。
synchronize local <ローカルディレクトリ> <リモートディレクトリ>

winscp> cd work
/home/hoge/temp/work

winscp> lcd work
E:myfolderwork

winscp> lls
2018/04/12  05:30        10,485,760 10m_36.html
2018/04/12  05:30        10,485,760 10m_37.html
2018/04/12  05:30        10,485,760 10m_38.html
2018/04/12  05:30        10,485,760 10m_39.html
2018/04/12  05:30        10,485,760 10m_40.html

winscp> synchronize remote E:myfolderwork /home/hoge/temp/work
比較中...
ローカル 'E:myfolderwork' => リモート '/home/hoge/temp/work'
同期中...
ローカル 'E:myfolderwork' => リモート '/home/hoge/temp/work'
E:...work10m_36.html   |       10240 KB | 38376.0 KB/s | binary | 100%
E:...work10m_37.html   |       10240 KB | 37382.1 KB/s | binary | 100%
E:...work10m_38.html   |       10240 KB | 38504.4 KB/s | binary | 100%
E:...work10m_39.html   |       10240 KB | 37966.6 KB/s | binary | 100%
E:...work10m_40.html   |       10240 KB | 38530.1 KB/s | binary | 100%

ファイルの⾃動同期

「keepuptodate」コマンドを使用すると、ローカルディレクトリ内を監視し、更新されたファイルを⾃動的にリモートディレクトリにアップロードすることができます。

たとえば、ローカルディレクトリ「E:myfolderwork」と、リモートディレクトリ「/home/hoge/temp/work」を⾃動同期する手順は、次のとおりです。

winscp> keepuptodate E:myfolderwork /home/hoge/temp/work
変更を監視しています。終了するには Ctrl-C を押してください...
'E:myfolderwork'のサブ ディレクトリをスキャン中...
1 ディレクトリの変更を監視中...
'E:myfolderwork'に変更が見つかりました
ローカル 'E:myfolderwork' => リモート '/home/hoge/temp/work'
E:...work10m_46.css    |       10240 KB | 34370.5 KB/s | binary | 100%
ユーザによって終了しました。

スクリプト機能

スクリプト機能については、ここでは詳しくは触れませんが、複数ディレクトリへのアップロードなど、より複雑な処理を⾃動化することもできるようです。

あとがき

コンソールモードを使いこなせば、WinSCPでのファイル転送をより効率よく行うことができそうです。