簡體   English   中英

從 sftp 獲取最新文件到本地機器

[英]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)

您正在使用-llong列表的小寫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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM