我在 SFTP 服務器中有多個檔案,我只需要從中復制最新檔案。我已經撰寫了示例代碼,但我正在傳遞檔案名。我需要添加什么邏輯來識別來自 sftp 的最新檔案并將其復制到我的本地?
在 SFTP 服務器中 -
my_data_20220428.csv
my_data_20220504.csv
my_data_20220501.csv
my_data_20220429.csv
我正在運行的代碼 -
datadir="/script/data"
cd ${datadir}
rm -f ${datadir}/my_data*.csv
rm -f ${logfile}
lftp<<END_SCRIPT
open sftp://${sftphost}
user ${sftpuser} ${sftppassword}
cd ${sftpfolder}
lcd $datadir
mget my_data_20220504.csv
bye
END_SCRIPT
我需要做哪些更改才能自動從服務器中選擇最新檔案而不對檔案名進行硬編碼?
uj5u.com熱心網友回復:
您可以嘗試主要從您的示例中復制的此腳本,因此預計變數已經創建。
#!/usr/bin/env bash
datadir="/script/data"
rm -f "$datadir"/my_data*.csv
rm -f "$logfile"
new=$(echo "ls -halt $sftpfolder" | lftp -u "${sftpuser}","${sftppassword}" sftp://"${sftphost}" | sed -n '/my_data/s/.* \(.*\)/\1/p' | head -1)
lftp -u "${sftpuser}","${sftppassword}" sftp://"${sftphost}" << --EOF--
cd "$sftpfolder"
lcd "$datadir"
get "$new"
bye
--EOF--
uj5u.com熱心網友回復:
你可以試試:
latest=$(lftp "sftp://$sftpuser:$sftppassword@$sftphost" \
-e "cd $sftpfolder; glob rels -1t *.csv; bye" |
head -1)
lftp "sftp://$sftpuser:$sftppassword@myhost" \
-e "cd $sftpfolder; mget $latest; bye"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/470204.html
上一篇:搜索深度嵌套陣列以更新物件