FTP接続によるファイル転送のバッチ処理

ftpコマンドでバッチ処理したいときってありますよね。
しょっちゅう同じディレクトリの中身を同じディレクトリに放り込むとか。
じゃ、シェルスクリプト書きましょうということで。
あ、例のごとくWindowsじゃなくてLinuxです

で、今回はFTPS(FTP over SSL)での記述なので、ftpじゃなくてlftp使います。
まあftpでも同じような感じだと思います。

#!/bin/sh

if lftp <<_EOD
set cmd:fail-exit yes
open ftps://ftps.example.com
user hoge hogehoge
cd /remote
lcd /local
mirror -R
quit
_EOD
then
  echo "upload succeeded.n"
else
  echo "upload failed.n"
fi

という感じのシェルスクリプトを今回書きました。
内容としては、lftpコマンドで<<_EODから_EODまでを実行させて、実行結果が正常なら成功したよ、失敗したら失敗したよ、と表示させています。

lftpでは

set cmd:fail-exit yes

とすることで、コマンドが失敗したら接続を切ってエラーを返すようにできます。
バッチ処理にはもってこいです。
そのあと、openで接続先をftpsで開いて、userで認証、cdでリモートのファイルを置きたいディレクトリに移動、lcdでローカルの置きたいファイルがあるディレクトリに移動、mirror -Rでローカルのファイルをリモートにミラーしてquitで終了としてます。
このあたりは人によってやりたいことが違うのでご自由にしましょう。
見ての通り認証のパスワードがめっちゃ記述されている(user hoge hogehogeのhogehogeがパスワード)ので、スクリプトのパーミッションには気をつけましょう。

if – then – else – fiの流れはlftpコマンドが成功したらthenで失敗したらelseってことでまあ詳しくはシェルスクリプトでぐぐってください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>