0

我一直在尝试通过跨 FTP 服务器移动一些文件来解决相对较小的问题,但到目前为止还没有运气。

简而言之,这就是我正在做的事情,我有三台服务器:

SourceSFTP TargetSFTP Target_2_SFTP

该脚本应该执行以下操作

  1. 连接到 SourceFTP
  2. 抓取所有文件
  3. 循环文件
  4. 以文件为参数并对其进行处理的调用函数,我们称之为 postfunc()
  5. 将文件拖放到 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() 的内容,一切都会正确执行

4

0 回答 0