簡體   English   中英

在 lftp 中使用正則表達式忽略文件名中的某些字符串

[英]Using regular expression in lftp to ignore some strings from file name

使用 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 中包含 * 我的代碼如下:

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 實際上接受正則表達式:

目前您的正則表達式正在尋找匹配 abc_20221202_(下划線任意次數)的文件。csv

只需添加一個。 在 * 之前,因此它在 the.csv 之前匹配下划線之后的任何字符任意次數

像這樣:

文件名=$文件$日期"_.*".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

您可能錯過了文件和日期之間的下划線。 調試此類問題的一個好方法是啟用調試(“debug”命令)和命令日志記錄(設置 cmd:trace true)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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