Bash + SFTP shell:排序过滤文件列表?

时间:2013-03-20 00:20:57

标签: bash shell sftp

我在与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的?谢谢!

2 个答案:

答案 0 :(得分:1)

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

ls -ltr

答案 1 :(得分:0)

如果您可以执行sftp,则可以执行sshscp。它们都使用相同的守护进程: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。