bounty将在3天后过期。回答此问题可获得+50声望奖励。likeGreen希望吸引更多人关注此问题。
使用mget从目录中获取名为abc_yyyymmdd_hhmmss.csv的特定文件。文件夹中的示例文件:
abc_20221202_145911.csv
abc_20221202_145921.csv
abc_20221202_145941.csv
abc_20181202_145941.csv
但是,我想忽略hhmmss部分。我想得到所有文件与abc_20221202_*.csv
如何在mget.my中包含 * 代码如下:
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,它将下载文件。为什么 * 会导致检索文件时出现问题
3条答案
按热度按时间rmbxnbpk1#
假设mget实际上接受正则表达式:
当前,您的regexp正在查找与abc_20221202_(下划线任意次数).csv匹配的文件
只需在 * 之前添加一个.,这样它就可以匹配.csv之前的下划线之后的任意字符任意次数
就像这样:
文件名=$File$日期”_.*".csv
如果mget实际上不支持regex,就用wget代替:
gxwragnw2#
我认为是使用 * 时的反勾号导致了这个问题。一旦我删除了'(反勾号)并使用了下面的命令,它就工作得很好了。
bnl4lu3b3#
您可能在File和Date之间遗漏了下划线。调试此类问题的一个好方法是启用debug(“debug”命令)和命令日志记录(set cmd:trace true)