2013-03-20 120 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

相關問題