本文介绍了将文件从源复制到目标的SFTP bash外壳脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建了一个脚本来将本地文件复制到远程文件夹,该脚本在if条件外工作得很好,但当我将PUT命令包含在IF条件中时,PUT命令不起作用,并使用sftp协议登录到远程服务器,当存在时,它显示错误:PUT命令未找到

查看执行脚本后发生的情况

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 [email protected]
                put $localpath/* $remotepath

        else

推荐答案

在这样简单情况下,您可以使用scpInstad ofsftp并在命令行上指定要复制的文件:

 scp $localpath/* [email protected]:/$remotepath/

但如果您更愿意发出sftp命令,则sftp可以从其标准输入中读取命令,因此您可以这样做:

  echo "put $localpath/* $remotepath" | sftp [email protected]

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

sftp [email protected] << EOF
put $localpath/fileA $remotepath/
put $localpath/fileB $remotepath/
EOF

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

 sftp -b ./sftp_commands.txt [email protected]

这篇关于将文件从源复制到目标的SFTP bash外壳脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 00:24