2014-02-14 54 views
0

嗨我正在嘗試處理這樣的擴展名的文件.p8, .p16,*。p32。bash:試圖獲取具有特定擴展名的所有文件

./pack_vectors [email protected] 
for var in "[email protected]" 
do 
if [ -f $var ]; 
then 
pack_list="${var/.dat/.p}" 
echo $pack_list 
# below line doesn't work 
for f in $pack_list+([:digit:]);do 

什麼我得到的是:

./wrapper.sh: line 10: syntax error near unexpected token `(' 
./wrapper.sh: line 10: `for f in $pack_list+([:digit:]);do' 

爲什麼?

+0

嘗試** LS * .P [0-9] \ *** – Marichyasana

回答

1

更簡單的方法做的是使用find

find . -name "*.p8" -o -name "*.p16" -o -name "*.p32

-o是布爾OR

相當於其分配給一個變量,這樣做:

myvar=$(find . -name "*.p8" -o -name "*.p16" -o -name "*.p32")

1

幾個可能的我ssues。如果要執行中您試圖執行的正則表達式樣式文件,則必須先有extglob。因此,在您的for循環之前,請輸入

shopt -s extglob 

。如果您想使用中的posix字符類,您還需要尋找[[:digit:]]。所以把它們一起,嘗試

shopt -s extglob 
for f in ".p"+([[:digit:]]); do 

亂猜知道什麼「$ pack_list」是如此的具有上述「.P」所取代它。

+0

爲$ pack_list +([F:數字:]]);做 打動了我: ./wrapper.sh:9號線:靠近意外的標記語法錯誤'(」 ./wrapper.sh:9號線:'在$ pack_list + F([ [:digit:]]); do' – exilat

+0

@ user3306484什麼是'$ pack_list'? – BroSlow

+0

它現在的工作是這樣的: for f in「$ pack_list +([[:digit:]]) 「;做 – exilat

0

它現在的工作,有點BroSlow答案的改變:

for f in "$pack_list+([[:digit:]])"; do 
相關問題