【问题标题】:SFTP bash shell script to copy the file from source to destinationSFTP bash shell脚本将文件从源复制到目标
【发布时间】:2019-05-14 16:09:50
【问题描述】:

我创建了一个脚本来将本地文件复制到远程文件夹,该脚本在 if 条件之外工作正常,但是当我将 if 条件包含在 put 命令不起作用并使用 sftp 协议登录到远程服务器时当存在时,它会显示错误:找不到放置命令

看看执行脚本后发生了什么

Connected to 10.42.255.209.
sftp> bye
sftp.sh: line 23: put: command not found

请找到以下脚本。

echo -e;
echo -e "This script is used to copy the files";
sleep 2;

localpath=/home/localpath/sftp
remotepath=/home/destination/sftp/

        if [ -d $localpath ]
         then
           echo -e "Source Path found"
           echo -e "Reading source path"
           echo -e "Uploading the files"
           sleep 2;

                sftp username@10.42.255.209
                put $localpath/* $remotepath

        else

【问题讨论】:

  • 你可以简化这个并使用scp...:scp localpath user@10.42.255.209:/remote/path/
  • 也许sftp username@10.42.255.209 <<< "put $localpath/* $remotepath"?

标签: bash shell sftp copying


【解决方案1】:

这段代码对我有用 供参考阅读https://help.oclc.org/Librarian_Toolbox/Exchange_files_with_OCLC/Upload_files_with_SFTP/40SFTP_commands?sl=en

uploadFileToMFT(){
sftp -P ${PORT_NO} ${HOST_NAME}@${HOST_ID} <<EOF
cd /mdm_dev05
put ${EXPORT_OUTPUT}'/'${ID}'/'${F_NAME}
quit
EOF

}

【讨论】:

    【解决方案2】:

    在这种简单的情况下,您可以使用sftp 的scp instad 并在命令行上指定要复制的文件:

     scp $localpath/* username@10.42.255.209:/$remotepath/
    

    但是如果你想发出 sftp 命令,那么 sftp 可以从它的标准输入读取命令,所以你可以这样做:

      echo "put $localpath/* $remotepath" | sftp username@10.42.255.209
    

    或者您可以使用here document 将数据作为标准输入传递给 sftp,如果您想运行多个 sftp 命令,这可能会更容易:

    sftp username@10.42.255.209 << EOF
    put $localpath/fileA $remotepath/
    put $localpath/fileB $remotepath/
    EOF
    

    最后,您可以将 sftp 命令放在一个单独的文件中,例如 sftp_commands.txt ,并让 sftp 使用其 -b 标志执行这些命令:

     sftp -b ./sftp_commands.txt username@10.42.255.209
    

    【讨论】:

      猜你喜欢
      • 2013-12-02
      • 2015-06-07
      • 2016-08-05
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 2016-12-18
      相关资源
      最近更新 更多