2014-04-13 54 views
0

我有一個bash腳本來從ftp中檢索文件。bash腳本中的通配符

現在這些文件在文件名中包含一個日期字符串部分,但也包含在每個文件中發生更改的未定義數字。我想根據日期下載文件。

這是我的代碼。我只需要做通配法,ftp腳本已經可以工作了。

filename=$(echo $TIMESTAMP'0***vel.radar.h5') 

星星是3位數字,我不能估計,所以我會使用通配符。

謝謝

+0

問題是什麼?還要注意'*'代表任意數量的字符,所以'***'和'*'相同。一個字符的通配符是「?」。 – choroba

+0

我需要使用$ filename從ftp服務器下載文件 – user3408380

回答

1

這聽起來像你要處理多個文件,但你的腳本只能同時處理一個文件。此外,由於您指定了FTP,因此聽起來這些文件位於FTP服務器上,在這種情況下,本地文件名擴展將無濟於事。

您可能希望使用ftp客戶端的mget命令來下載與遠程端模式相匹配的多個文件。您還希望將$TIMESTAMP作爲該模式的一部分。我建議是這樣的:

ftp remote-hostname <<EOF 
cd path/to/log/files 
prompt 
mget ${TIMESTAMP}0???vel.radar.h5 
bye 
EOF 

這(本身<<EOFEOF上線)使用此文檔輸入文本提供給FTP條命令。它將擴展變量$TIMESTAMP,使其成爲mget命令的一部分,例如,如果$ TIMESTAMP是12345,那麼將會通知ftp命令mget 123450???vel.radar.h5

0

隨着?您不僅包含數字,還包含任何字符。所以如果你只想包括數字,你可以替換???字符[0-9] [0-9] [0-9]。

例子:

如果你有以下文件:

$ ls 0123vel.h5 0333vel.h5 033vel.h5 0pecvel.h5

與此LS可以顯示正確的文件:

$ ls 0[0-9][0-9][0-9]vel.radar.h5 0123vel.h5 0333vel.h5