从sftp服务器

时间:2017-03-23 14:00:08

标签: file download sftp

我需要从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

1 个答案:

答案 0 :(得分:0)

您正尝试在sftp中运行shell命令,但sftp不是shell。命令ls恰好存在于sftp中,但不存在$()tailawk。要查看此内容,只需键入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 .