2016-11-07 9 views
0

sftp/mgetが実際にファイルを取得するかどうかを調べる最も簡単な方法は何ですか?mgetでダウンロードしたファイルの数を確認する方法は?

私の現在のスクリプトは次のようになります。

sftp ${SFTP_USER}@${SFTP_SERVER} <<EOF 
    cd ${SFTP_SOURCE_DIR} 
    mget ${FILEPATTERN}* ${AL_FTP_DIR} 
    bye 
    EOF 

しかし、ファイルパターンに一致するファイルがない場合は、テスト中に、エラーが返されず、スクリプトが穏やかに気づいていないのに運びます。

$ {FILEPATTERN} *と一致するファイルが既にカレントディレクトリにあると仮定します... mgetが実際に何かを引っ張ったかどうかをどのように確認できますか?

解決策のための私の最高の考えは、一時的なディレクトリを使用することです...チェックして移動... shrug ..しかし、私はそこにもっと洗練されたソリューションがあると思いますか?

TDIR="AL_TMP_$$" 
    mkdir $TDIR 

    sftp ${SFTP_USER}@${SFTP_SERVER} <<EOF 
    cd ${SFTP_SOURCE_DIR} 
    mget ${FILEPATTERN}* ${AL_FTP_DIR}/${TDIR} 
    bye 
    EOF 

    CHKCNT=`ls -ltr $TDIR | wc -l` 

    if [ ${CHKCNT} -eq 1 ]; 
    then 
    echo "ERROR: No files found on FTP server." 
    rmdir $TDIR 
    exit 1 
    fi 
    mv $TDIR/* . 
    rmdir $TDIR 

答えて

1
# count files before transfer 
files=("$AL_FTP_DIR"/*) 
n_before=${#files[@]} 

# transfer 
sftp ... 

# count files after transfer 
files=("$AL_FTP_DIR"/*) 
n_after=${#files[@]} 

diff=$((n_after - n_before)) 
echo "$diff files were transferred" 
+0

うーん、私は当初による実行中の並列ジョブに、しかし、私はもっとそれについて考えて、ええ、これはうまくいく、並列ジョブは、異なるファイルパターンで動作することを却下していた:)だから私はできましたこのトリックを使用して...私は一時ディレクトリを保存すると思います...ありがとう! – Ditto

関連する問題