1

我在与 SFTP 服务器交互时遇到了一个奇怪的问题。我需要做的是登录,找到满足特定条件的最新文件,然后下载。所有这些都来自 bash 脚本。到目前为止,它的完成方式是简单地运行ls -lt并获取输出的第一行:

echo "ls -lt" > tmp.sftp
sftp -b tmp.sftp user@ftps.server.com:/inbox 1>sftp.log 2>&1

FILE=$(cat sftp.log | sed -n 3p |  awk '{print $NF}')

echo "get $FILE" > tmp.sftp
sftp -b tmp.sftp user@ftps.server.com:/inbox

但是,他们最近开始将其他文件(我不关心)放到同一个文件夹中。我尝试将代码更改为 do ls -lt blah*,但由于某种原因,当存在通配符过滤器时,文件列表以相反的顺序排序......

我觉得我解决这个问题的方式很荒谬,应该有更好的方法。我看哪个方向?卷曲?得到?谢谢!

4

2 回答 2

1

您可以通过添加-r标志来反转ls的输出顺序。

ls -ltr
于 2013-03-28T01:39:24.747 回答
0

如果你能做到sftp,你可以做到sshscp。它们都使用相同的守护进程sshd::

这可能会使您的任务比尝试通过scp.

使用ssh,您可以执行远程命令并将该远程命令报告回您的系统:

$ ssh user@ftps.server.com ls -lt inbox

这将按名称顺序列出远程系统上的文件。顺便说一句,为什么整个命令都包含-lls命令中?为什么不简单地这样做:

$ ls -t | head -1

这将为您列出最新的文件,您可以远程执行此操作:

$ FILE=$(ssh user@ftps.server.com ls -t inbox | head -1)

拥有该文件后,您可以使用scp它来复制它:

$ scp user@ftps.server.com:/inbox/$FILE 。

于 2013-03-20T01:02:46.390 回答