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

ftp転送をシェルスクリプトで

FTPの転送処理をシェルスクリプトで実行する例です。

まず理解すること

ftpコマンドは標準入力からFTPの内部コマンドを受け取ることができます。

たとえばこんなファイルを用意して、

open 192.168.1.10
user www PASSWORD
cd /var/www/html
ascii
get index.html

ftpコマンドに渡してやれば指定した処理を実行できます(この場合はindex.htmlの取得)。

ftp -n < ftp_cmd.txt

-nはログインプロンプト、.netrc参照を抑止するオプションです。
逆にftpのログインを簡略化する.netrcで書いたように.netrcををうまく使えば、

echo get index.html | ftp

だけでいけるように簡略化することも出来るでしょう。

シェルスクリプトにする

もう少し汎用的なシェルスクリプトとして、
サーバ、アカウント、ファイル名を引数で渡してしてファイルを送信するスクリプトを作ってみます。

./ftp_up.sh sv1 mikeda mikepass  sample.jpg

これはヒアドキュメント使うと簡単に出来ます。

#!/bin/sh

SERVER=$1
USER=$2
PASS=$3
FILE=$4

ftp -n <<END
open $SERVER
user $USER $PASS
cd /tmp
binary
prompt
mput $FILE
END


状況によってFTPコマンド、変数化する部分を変えればけっこう応用が利きます。

まとめ

ftp転送をシェルスクリプト化する簡単な例でした。

FTP便利ですが、ただ利便性、セキュリティともにSSH(ssh, scp)やそれを使ったrsyncには適わないと思いますのでSSHが使える場合はそっち使いましょう。