Bash + SFTP shell:对过滤的文件列表进行排序?
问题描述:
我在与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的?谢谢!
答
您可以通过添加-r标志来反转您的ls的输出顺序。
ls -ltr
答
如果你可以做sftp
,你可以做ssh
和scp
。他们都使用相同的守护进程: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。
感谢您的建议。不幸的是,'ssh user @ ftps.server.com'挂起,我认为他们有用户的shell设置为'/ bin/false'或其他东西。 – braindancer 2013-03-20 01:54:45