我需要从sftp服务器下载最新文件。我在shell脚本中编写了以下代码,但无法下载该文件。 检索文件后得到以下错误
无效命令
请帮我下载文件。
#!/bin/sh
HOST='xx.xx.xx.nxx'
USER='xx'
PASSWD='xx'
sftp $USER@$HOST <<EOF
cd /inbound
file=$(ls -ltr *.xml | tail -1 | awk '{print $NF}')
get $file
EOF
答案 0 :(得分:0)
您正尝试在sftp中运行shell命令,但sftp不是shell。命令ls
恰好存在于sftp中,但不存在$()
,tail
或awk
。要查看此内容,只需键入sftp $USER@$HOST
即可打开sftp会话并键入help
以获取所有可用命令。
所以你需要做的是使用ssh执行shell命令来获取文件名。所以像这样:
file=$(ssh $USER@$HOST "ls -ltr /inbound/*.xml" | tail -1 | awk '{print $NF}')
这在服务器上远程执行命令ls -ltr /inbound/*.xml
。然后,您的shell脚本在本地处理它的输出。或者通过在服务器上进行处理可以更有效:
file=$(ssh $USER@$HOST "ls -ltr /inbound/*.xml | tail -1 | awk '{print \$NF}'")
现在shell变量file
包含最新文件的名称。然后你可以用sftp下载该文件
sftp $USER@$HOST:$file .