使用mget从目录中获取名称为abc_yyyymmdd_hhmss .csv的特定文件。文件夹中的示例文件:
abc_20221202_145911.csv
abc_20221202_145921.csv
abc_20221202_145941.csv
abc_20181202_145941.csv
但是,我想忽略hhmmss部分。我想要得到abc_20221202_*.csv
的所有文件如何在mget中包含*。我的代码如下:
File=abc_
Date=20221202
Filename=$File$Date"_*".csv
// Assume I have sftp connection established and I am in directory //where files with above naming convention are present. As I can //download the file when hardcoding exact file name during testing
conn=`lftp $protocol://$user:$password@$sftp_server -p $port <<EOF>/error.log
cd $path
mget $Filename
EOF`
脚本能够找到文件,但不能从服务器检索它。但是,如果我删除*并提供整个文件名abc_20221202_145941.csv,它将下载该文件。为什么*在检索文件
时会引起问题?假设mget实际接受regex:
当前您的regexp正在查找与abc_20221202_(下划线任意次数)匹配的文件。csv
只需添加一个。在*之前匹配下划线之后的任何字符在。csv
之前的任意次数一样:
文件名=文件Date"美元;_。"* . csv
如果mget实际上不支持正则表达式,只需使用wget代替:
wget -r -np -nH -A "abc_20221202_.*.csv" --ftp-user=user --ftp-password=psd ftp://ip/*
我认为在使用*时反勾号符号导致了问题。一旦我删除'(反打号)并使用下面的命令,它工作得很好。
lftp -p $port $protocol://$user:$password@$sftp_server <<EOF>/error.log
cd $path
lcd $targetPath
mget $Filename
EOF
您可能在File和Date之间漏了一个下划线。调试此类问题的一个好方法是启用调试(" debug "命令)和命令日志记录(设置cmd:trace为true)