我有一個bash腳本來從ftp中檢索文件。bash腳本中的通配符
現在這些文件在文件名中包含一個日期字符串部分,但也包含在每個文件中發生更改的未定義數字。我想根據日期下載文件。
這是我的代碼。我只需要做通配法,ftp腳本已經可以工作了。
filename=$(echo $TIMESTAMP'0***vel.radar.h5')
星星是3位數字,我不能估計,所以我會使用通配符。
謝謝
我有一個bash腳本來從ftp中檢索文件。bash腳本中的通配符
現在這些文件在文件名中包含一個日期字符串部分,但也包含在每個文件中發生更改的未定義數字。我想根據日期下載文件。
這是我的代碼。我只需要做通配法,ftp腳本已經可以工作了。
filename=$(echo $TIMESTAMP'0***vel.radar.h5')
星星是3位數字,我不能估計,所以我會使用通配符。
謝謝
這聽起來像你要處理多個文件,但你的腳本只能同時處理一個文件。此外,由於您指定了FTP,因此聽起來這些文件位於FTP服務器上,在這種情況下,本地文件名擴展將無濟於事。
您可能希望使用ftp客戶端的mget
命令來下載與遠程端模式相匹配的多個文件。您還希望將$TIMESTAMP
作爲該模式的一部分。我建議是這樣的:
ftp remote-hostname <<EOF
cd path/to/log/files
prompt
mget ${TIMESTAMP}0???vel.radar.h5
bye
EOF
這(本身<<EOF
到EOF
上線)使用此文檔輸入文本提供給FTP條命令。它將擴展變量$TIMESTAMP
,使其成爲mget
命令的一部分,例如,如果$ TIMESTAMP是12345,那麼將會通知ftp命令mget 123450???vel.radar.h5
。
隨着?您不僅包含數字,還包含任何字符。所以如果你只想包括數字,你可以替換???字符[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
問題是什麼?還要注意'*'代表任意數量的字符,所以'***'和'*'相同。一個字符的通配符是「?」。 – choroba
我需要使用$ filename從ftp服務器下載文件 – user3408380