我一直在尝试通过跨 FTP 服务器移动一些文件来解决相对较小的问题,但到目前为止还没有运气。
简而言之,这就是我正在做的事情,我有三台服务器:
SourceSFTP TargetSFTP Target_2_SFTP
该脚本应该执行以下操作
- 连接到 SourceFTP
- 抓取所有文件
- 循环文件
- 以文件为参数并对其进行处理的调用函数,我们称之为 postfunc()
- 将文件拖放到 TargetSFTP
当在 postfunc 中我再次调用 lftp 以将文件传输到 Target_2SFTP 时,就会出现问题。该命令已正确执行(我可以看到文件已移动),但数字 5 永远不会发生。
这是我的脚本:
function postfunc() {
the_file=$1
lftp<<END_SCRIPT2
open sftp://$Target2SFTP
user $USERNAME $PASSWORD
cd /root
put $the_file
bye
END_SCRIPT2
}
echo "Downloading files from $SOURCE_SFTP"
lftp -e "echo 'testing connection';exit" -u $SOURCE_USERNAME,$SOURCE_PASSWORD $SOURCE_SFTP
lftp -e "set xfer:clobber true;mget $SOURCE_DIR*.csv;exit" -u $SOURCE_USERNAME,$SOURCE_PASSWORD $SOURCE_SFTP || exit 0
files=(*.csv)
batch=10
for ((i=0; i < ${#files[@]}; i+=batch)); do
commands=""
# Do some stuff
for((j=0; j < batch; j+=1)); do
commands=$commands"mv source_dir/${files[i+j} archivedir/${files[i+j]};"
postfunc ${files[i]}
done
echo "Archiving batch..."
lftp -e "$commands;exit" -u $SOURCE_USERNAME,$SOURCE_PASSWORD $SOURCE_SFTP
lftp<<END_SCRIPT
open sftp://$TARGET_SFTP
user $TARGET_USERNAME $TARGET_PASSWORD
cd $TARGET_DIR
mput dirr/*
bye
END_SCRIPT
done
希望我遗漏了一些明显的东西......目前即使我移动一个文件“归档批处理”也永远不会出现,如果我删除 postfunc() 的内容,一切都会正确执行