ShellでFTPファイル転送

Shellスクリプトで、FTPを利用しファイルを送信する方法を記載します。

 

スクリプト例

Apacheのアクセスログを、毎日、別マシンにFTPプロトコルを利用し転送するシェルスクリプトです。

また、このシェルが動作した場合に、処理した項目を実行ログファイルに記録します。

#!/bin/sh

変数の定義
yesterday=`date -v-1d +20%y%m%d`
logdelday=`date -v-5d +20%y%m%d`

LOG_DIR="/var/log/ftpft"
FTPFT_LOG_DIR="/var/log/ftpft"
FTPFT_LOG=$FTPFT_LOG_DIR/ftpft-$today.log

開始をログファイルの記載
echo `date` "START FTPTF: FTP File Transmission" >> $FTPFT_LOG 

送信する元ファイルが存在しているか確認。無ければログファイルに記載して終了
##
##Confirmation Access LogFile 
##
if [ ! -f $LOG_DIR/access.log.$yesterday.gz ]; then
	echo `date` "ERROR: $LOG_DIR/access.log.$yesterday.gz dose not found. " >> $FTPFT_LOG
	exit 1
fi

転送先サーバにFTPで接続。ファイルをFTPプロトコルで転送。
##
##FTP File Transmission. FTP PUT
##
echo `date` "START: FTP PUT LogFile. " >> $FTPFT_LOG

cd $LOG_DIR

FTPで接続を確立。ENDが呼ばれるまでFTPのログを、実行ログファルに取る
ftp -i -v -n 192.168.1.1 << END >> $FTPPT_LOG 
user hoge passwd <---ユーザ、パスワードを入れてログイン
bin <---バイナリモードに移行
put access.log.$yesterday.gz <---ファイルを送信
quit <---接続を切断
END <---ENDを読んで終了

FTPでのファイル転送処理が終了した事を実行ログファルに記載
echo `date` "END: FTP PUT LogFile. " >> $FTPFT_LOG

古い実行ログファイルを削除する。
##
##Delete OLD FTPFFT log file(5days) <---5日前の実行ログファイルを削除
##
if [ -f $FTPFT_LOG_DIR/ftpft-$logdelday.log ]; then
	echo `date` "DELETE:Delete OLD FTPFT log file" >> $FTPFT_LOG 
	rm $FTPFT_LOG_DIR/ftpft-$logdelday.log
fi

シェルの処理が全て終了した事を、実行ログファルに記載
echo `date` "END: FTPTF: FTP File Transmission. " >> $FTPFT_LOG

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">