自動的にFTP転送させよう

 データができあがって、後はFTP転送しておしまい。FTP転送するのはよくあることですが、大抵はFTPクライアント(FetchとかTransmitとか、FTP Explorerとか)を使って行っているはずです。ドラッグドロップでできてしまうので簡単かつ手軽です。
 しかし、業務によっては毎日この作業を行う事もありえます。そんな時は特定フォルダにあるファイルを自動的にサーバーに転送するようになっていると便利です。さらに、午前10時になったら転送するようにするといった事もできます。
 前振りはこのくらいにして本題に進みます。まず、以下のテキストをエディタで入力しcmd.txtという名前で保存します。この時、改行コードはLF(UNIXのもの)にしてください。

open サーバー名
user ユーザー名 パスワード
binary
prompt
cd 転送先ディレクトリ
lcd 転送元ディレクトリ
mput *.txt
bye

 サーバー名はFTP転送するサーバーの名前です。www.abc.comとかwww.abc.co.jpです。ユーザー名とパスワードはFTP転送する際に使っているものを指定してください。5行目に

cd 転送先ディレクトリ

 とありますが、これがファイルを転送するサーバーのディレクトリになります。ログインしたユーザーのtestディレクトリならば

cd test

 と指定します。次の行の

lcd 転送元ディレクトリ

 は転送する元データがあるディレクトリになります。ユーザー名がdigiでFTPディレクトリ(フォルダ)に転送するデータがある場合には

lcd /Users/digi/FTP/

 と指定します。次の行の

mput *.txt

 は拡張子がtxtのファイルを全部サーバーに転送します。もし、1つだけのファイルなら

put sample.txt

 のようにします。mput *とするとディレクトリ内のファイル(ディレクトリは除く)が全部転送されます。

 これで準備その1ができあがりです。次に以下のテキストを入力しput.shという名前で保存します。これも改行コードはLF(UNIX)にしてください。

#!/bin/sh
/usr/bin/ftp -n < /Users/ユーザー名/ディレクトリ名/cmd.txt

 ユーザー名はMacOS Xでのユーザー名になります。ディレクトリ名はcmd.txtが保存されているディレクトリへのパスになります。分からない場合はcmd.txtが保存されているフォルダをターミナルにドラッグドロップしてください。パスが表示されます。

 次にput.shがあるディレクトリに移動して以下のように入力します。

chmod 755 put.sh

 次にcmd.txtがあるディレクトリに移動して以下のように入力します。

chmod 600 cmd.txt

 これで、やっと準備ができあがりです。
 あとは午前10時に自動的に転送するようにします。ターミナルから以下のように入力してください。

crontab -e

 エディタ画面に切り替わります。iのキーを押してから以下の文字列を入れて下さい。

0 10 * * * /Users/ユーザー名/ディレクトリ名/put.sh

 ユーザー名はMacOS Xでのユーザー名(日本語でなくて英語名です。分からない場合にはターミナルでwhoamiと入れてください。英語でのユーザー名が表示されます)、ディレクトリ名はput.shがある場所(パス)を指定します。put.shがホームディレクトリにあるならば以下のようになります。(ユーザー名はdigiとします)

0 10 * * * /Users/digi/put.sh

 入力が終わったらescキーを押してから:wqと入力してください。入力に失敗したり、変になってしまったらescキーを押してから:q!と入力してください。その後、再度crontab -eとして入力を行ってください。それでも変になってしまったらターミナルウィンドウを閉じてサイド新規ウィンドウを開いてやり直して下さい。朝10時でなく午後5時30分の場合は以下のようになります。

30 17 * * * /Users/digi/put.sh

 動作を確認したい場合は以下のように1分ごとに実行されるようにしましょう。

* * * * * /Users/digi/put.sh

 すでにある設定を消したい場合は消したい行までカーソルキーで移動させddとdを2回押します。これで1行削除されます。その後、iキーを押して入力を行ってください。
 動作するとメールが送られます。そのメールは/var/mail/ディレクトリに入りますので、もう1枚ターミナルウィンドウを開いて以下のように入力してください。

tail -f /var/mail/ユーザー名

 これで自動的に動作結果が表示されていきます。動作を確認したら、以下のように「> /dev/null 2>&1」を付けておくとメールが送られなくなります。

#!/bin/sh
/usr/bin/ftp -n < /Users/ユーザー名/ディレクトリ名/cmd.txt > /dev/null 2>&1

 長い説明で、コマンドとか説明省いていますが、こんな具合に自動的にFTP転送させておくことができます。うまく使えば便利な代物です。特にOSで最初から装備されている上に高速かつ安定していますので割と安心して使えます。
 データの自動バックアップとかには、こういうのもいいかもしれません。いろいろ組み合わせれば、届いた原稿を特定フォルダに入れてスクリプトを実行すれば、IllustratorやPhotoshopに自動的に読み込まれて整形されてPDFファイルで保存、自動的にPDFファイルの目次を作って目次と保存したファイルをFTPで自動転送なんてのも可能なはずです。あと、パッシブモードにしたい場合はftp -n -pのように-pを付けて下さい。cmd.txtの3行目に passiveを入れてもかまいません。



[サンプルをダウンロード]