[英]How to get latest file from sftp server to local using mget in linux?
[英]Get latest file from sftp to local machine
我需要從sftp獲取最新的文件到我的本地機器,我有一個概念,就是在獲取列出的最新文件之前,先在sftp中列出目標目錄的最新文件。
使用 linux shell 腳本完成此操作的任何命令?
file=$(sftp username@servername 'ls -ltr /server/path | tail -n 1')
我已使用此命令列出最新文件,但它不起作用。 我也不知道獲取列出文件的命令,知道嗎?
我確實面臨着實現這一目標的艱難時期。 在 sftp 控制台上運行時,顯然tail不是有效命令。 就我而言,我們只能通過 SFTP 而不是通過 SSH 訪問服務器。 因此, https: //stackoverflow.com/users/3422102/david-c-rankin 的解決方案對我不起作用,因為該解決方案在通過 ssh 執行命令時有效。
//this gives me name of the latest file on SFTP server
fileName=$(echo "ls -1rt" | sftp -oIdentityFile=<pathToKeyFile> username@sftpServer:/remoteDir | tail -1)
//this fetches the latest file from sftp server
echo "get $fileName" |sftp -oIdentityFile=<pathToKeyFile> username@sftpServer:/remoteDir
將上述一組命令包裝在一個 shell 文件中,它將為您順利工作。
希望這會節省一些時間和精力並幫助某人
您的ls options
錯誤,請嘗試:
file=$(ssh username@servername 'ls -1tr /server/path' | tail -n 1)
您正在使用-l
( long
列表的小寫L
)選項而不是使用-1
(第一個)選項( list one file per line
)這會導致您的ls
命令包含文件權限、文件所有權等...當用作scp
輸入時會導致命令失敗。
此外,如果您向scp
提供文件名,則不需要-r
(遞歸)選項。 以下應該是scp
命令所需的全部內容。 (如果文件名中有空格,請不要忘記雙引號"$file"
以防止分詞)
scp username@servername:/path/path/"$file" /my/home/directory
要獲得多個文件名,請使用舊的反引號:
file=`ssh username@servername 'ls -ltr /server/path' | grep "Mar 16"|awk '{print $9'}`
這是假設您可以自動登錄到遠程。 使用這些文件名發布此內容,您可以再次執行 sftp
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.