SFTP経由でリモートサーバーに接続し、そこからファイルを取得するスクリプトがあります。私のスクリプトは次のようになります。
/usr/bin/sftp [email protected] <<EOF
lcd /dir1/dir2/dir3
cd /rsdir1/rsdir2/rsdir3
get file_pattern`date -d "last month" +%m%Y`.csv
EOF
rc=$?
if [[ $rc != 0 ]]
then
echo "Error occured getting file and the script abended with error code $rc" `date "+%Y-%m-%d-%H.%M.%S"`
exit 1
else
echo "Successfully transferred the file" `date "+%Y-%m-%d-%H.%M.%S"`
fi
ただし、スクリプトがパターンのファイルを見つけられない場合でも、スクリプトのelse部分に移動し、画面に次のように出力します。
Connecting to remote.server.com...
sftp> lcd /dir1/dir2/dir3
sftp> cd /rsdir1/rsdir2/rsdir3
sftp> get file_pattern032014.csv
Couldn't stat remote file: No such file or directory
File "/rsdir1/rsdir2/rsdir3/file_pattern032014.csv" not found.
Successfully transferred the file YYYY-MM-DD-24HH.MI.SS
私がここで間違っているかもしれないことについて何かアドバイスはありますか?
正しいリターンコードを取得しました。sftpセッションが正しく実行されたため、リターンコードは0です。
代わりにscp
を使用する必要があります。コピーに失敗しても、0は返されません。
あなたは次のようなことをすることができます:
file=file_pattern`date -d "last month" +%m%Y`.csv
[email protected]:/rsdir1/rsdir2/rsdir3/$file
local=/rsdir1/rsdir2/rsdir3/$file
if scp -q $remote $local
then
echo "Successfully transferred the file" `date "+%Y-%m-%d-%H.%M.%S"`
else
echo "Error occured getting file and the script abended with error code $?" `date "+%Y-%m-%d-%H.%M.%S"`
exit 1
fi
編集:コピー対象をファイル名に変更しました:ディレクトリにコピーし、そのディレクトリが見つからない場合は、ディレクトリ名を持つファイルを作成します。
次のことを試してください。
/usr/bin/sftp -b - [email protected] <<EOF ...
「-b-」は、コマンドラインからの読み取り中にsftpをバッチモードにします。バッチモードは(私のシステムでは)sftpを終了し、sftpコマンドの1つが失敗するとゼロ以外の終了コードを返します。