log

日々の記録と、書くことを楽しむためのブログです

WinSCPスクリプトで複数のディレクトリにファイルをアップロードする

今回したいこと

複数のファイルを各々のディレクトリへ一度にアップロードしたい。

いろいろな事情があって、先日こういう用事ができました。
なのでせっかくだからWinSCPスクリプト機能を使ってみました。 忘れてもいいようにやり方を書いておきます。

使うもの

ディレクトリ構成

今回は、こういう構成のディレクトリに対してファイルを送るとします。

  • myapp
    • static
    • html
    • py

送るファイル

css、js、html、pyの計4つのディレクトリへ、ひとつずつそのディレクトリに応じた以下の4つのファイルを送りたいです。

  • mypage.css
  • mypage.js
  • mypage.html
  • mypage.py

名前はすべて「mypage」で統一します。

スクリプト

まず、WinSCPに指示を出すためにスクリプトを書きます。スクリプト機能とはなんなのかについては、こちらをご参照ください。

以下が、まとめてファイルを転送するスクリプトです。
ただただファイルを更新するだけです。特別なことやスゴいことは何もしない、基本的なものです。
ぼかしてある箇所は適宜よきにはからうこと。

# バッチモードON
option batch on

# ダイアログを表示しない
oprion confirm off

# サーバーへ接続
open ユーザー名@ホスト名:ポート番号

# ----------------------------------------------------------------------------
# 【1, cssの更新】
# アップロード先のリモートのディレクトリに移動
cd リモートサーバー/myapp/static/css

# アップロードするファイルがあるローカルのディレクトリに移動
lcd ローカル/myapp/static/css

# 対象ファイルの削除
rm %1%.css

# 対象ファイルのアップロード
put %1%.css

# ----------------------------------------------------------------------------
# 【2, jsの更新】
# アップロード先のリモートのディレクトリに移動
cd リモートサーバー/myapp/static/js

# アップロードするファイルがあるローカルのディレクトリに移動
lcd ローカル/myapp/static/js

# 対象ファイルの削除
rm %1%.js

# 対象ファイルのアップロード
put %1%.js

# ----------------------------------------------------------------------------
# 【3, htmlの更新】
# アップロード先のリモートのディレクトリに移動
cd リモートサーバー/myapp/html

# アップロードするファイルがあるローカルのディレクトリに移動
lcd ローカル/myapp/html

# 対象ファイルの削除
rm %1%.html

# 対象ファイルのアップロード
put %1%.html

# ----------------------------------------------------------------------------
# 【4, pyの更新】
# アップロード先のリモートのディレクトリに移動
cd リモートサーバー/myapp/py

# アップロードするファイルがあるローカルのディレクトリに移動
lcd ローカル/myapp/py

# 対象ファイルの削除
rm %1%.py

# 対象ファイルのアップロード
put %1%.py


# 終了
exit

移動させたいディレクトリとファイルの組み合わせがもっとたくさんある、という場合は「#-----(略」から「put %1%.py」までのくだりをコピペして書き換えて増やしてください。

相手方のサーバーによってはスラッシュがバックスラッシュだったりするかもしれません。
GUI版のWinSCPを開き、リモート側のパスが書かれているところを右クリックし「パスをクリップボードにコピー」して貼り付けるのが一番早いと思います。

サーバーへ接続するときだけパスワードを訊かれますので入力してください。
パスワードもスクリプトに一緒に書くことで入力を省くことができますが、今回はやめておきます。

スクリプトは適当な名前で保存してください。txt形式でよいでしょう。

コマンド

スクリプトが書き終わったら、コマンドプロンプトなどのコマンドツールを開きます。
そしてスクリプトを置いたディレクトリへ移動し、以下のコマンドを打ち込みます。

日本語で書かれている場所は、例によって適宜よきにはからうこと。

"WinSCPがインストールされている場所のパス" /console /script=スクリプトファイル名.txt /parameter "アップするファイル名(拡張子抜き)"
  • WinSCPがインストールされている場所のパスWinSCPがある場所のパスです
  • スクリプトファイル名.txt:先ほど作ったスクリプトファイルの名前です
  • アップするファイル名(拡張子抜き):今回の例でいうところの「mypage」です。スクリプト内の「%1%」に当てはめられて実行されます。だから拡張子はいりません。

このコマンドを実行するとWinSCPがコマンドモードで開き、目的のファイルがそれぞれお目当てのディレクトリに上書きアップロードされているはずです。
何度も同じ作業をする場合はコマンドをbatファイルなどにしちゃうといいかもしれませんね。