2013-03-20 103 views
1

我在与SFTP服务器交互时出现了一个奇怪的问题。我需要做的是登录,找到满足特定条件的最新文件,并下载它。所有这些来自bash脚本。它被完成的方式,到目前为止是通过简单地运行ls -lt并考虑输出的第一行:Bash + SFTP shell:对过滤的文件列表进行排序?

echo "ls -lt" > tmp.sftp 
sftp -b tmp.sftp [email protected]:/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 [email protected]:/inbox 

然而,他们最近开始把其他文件(我不在乎)到同一个文件夹。我试图改变代码做ls -lt blah*,但由于某种原因,当有一个通配符过滤器,文件列表得到相反的顺序排序...

我觉得我解决这个问题的方式是荒谬的,应该有一个更好的方法。我看起来怎么样?卷曲? wget的?谢谢!

回答

1

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

ls -ltr 
0

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

这可能会使您的任务比尝试通过scp执行所有操作更容易一点。

随着ssh,您可以执行远程命令,并具有远程命令的报告提供给您的系统:

$ ssh [email protected] ls -lt inbox 

这将列出名称的顺序在远程系统上的文件。顺便说一下,为什么在ls命令中与-l的整个联系?为什么就不能做到这一点:

$ ls -t | head -1 

,将列出最新的文件给你,你可以远程地做到:

$ FILE=$(ssh [email protected] ls -t inbox | head -1) 

一旦你的文件,你可以使用scp复制它:

$ SCP [email protected]:/收件箱/ $ FILE。

+0

感谢您的建议。不幸的是,'ssh user @ ftps.server.com'挂起,我认为他们有用户的shell设置为'/ bin/false'或其他东西。 – braindancer 2013-03-20 01:54:45