那么检查sftp / mget是否实际拉取文件的最简单方法是什么?
我当前的脚本如下所示:
sftp ${SFTP_USER}@${SFTP_SERVER} <<EOF
cd ${SFTP_SOURCE_DIR}
mget ${FILEPATTERN}* ${AL_FTP_DIR}
bye
EOF
但是在测试期间,如果没有与文件模式匹配的文件,则不会返回任何错误,并且脚本会继续无法发现。
假设我已经有匹配$ {FILEPATTERN}的当前目录中的文件* ...我怎么知道mget是否真的拉了什么?
我最好的解决方案是使用临时目录...检查并移动...... 耸肩 ..但我认为必须有一个更优雅的解决方案?
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
答案 0 :(得分: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"