我在与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
但是,他们最近开始将其他文件(我不关心)放到同一个文件夹中。我尝试将代码更改为ls -lt blah*
,但由于某种原因,当存在通配符过滤器时,文件列表会按相反顺序排序...
我觉得我解决这个问题的方式很荒谬,应该有更好的方法。我看哪个方式?卷曲? wget的?谢谢!
答案 0 :(得分:1)
您可以通过添加 -r 标记来反转 ls 输出的顺序。
ls -ltr
答案 1 :(得分:0)
如果您可以执行sftp
,则可以执行ssh
和scp
。它们都使用相同的守护进程:sshd
:
这可能会使您的任务比通过scp
完成所有操作更容易。
使用ssh
,您可以执行远程命令并将该远程命令报告回系统:
$ ssh user@ftps.server.com ls -lt inbox
这将按名称顺序列出远程系统上的文件。顺便说一句,为什么-l
命令中ls
的整个结合?为什么不简单地这样做:
$ ls -t | head -1
那将为您列出最新的文件,您可以远程执行此操作:
$ FILE=$(ssh user@ftps.server.com ls -t inbox | head -1)
拥有该文件后,您可以使用scp
进行复制:
$ scp user@ftps.server.com:/ inbox / $ FILE。