如何使用 shell 脚本将最新文件从 sftp 复制到本地目录?
How to copy latest file from sftp to local directory using shell script?
我在 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
我需要做哪些更改才能自动从服务器选择最新文件而不对文件名进行硬编码?
你可以试试这个脚本,主要是从你的示例中复制过来的,所以应该已经创建了变量。
#!/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/.* \(.*\)//p' | head -1)
lftp -u "${sftpuser}","${sftppassword}" sftp://"${sftphost}" << --EOF--
cd "$sftpfolder"
lcd "$datadir"
get "$new"
bye
--EOF--
你可以试试:
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"
我在 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
我需要做哪些更改才能自动从服务器选择最新文件而不对文件名进行硬编码?
你可以试试这个脚本,主要是从你的示例中复制过来的,所以应该已经创建了变量。
#!/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/.* \(.*\)//p' | head -1)
lftp -u "${sftpuser}","${sftppassword}" sftp://"${sftphost}" << --EOF--
cd "$sftpfolder"
lcd "$datadir"
get "$new"
bye
--EOF--
你可以试试:
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"