bash:尝试获取具有特定扩展名的所有文件

时间:2014-02-14 17:50:01

标签: bash pattern-matching

您好我正在尝试处理扩展名为 .p8, .p16,*。p32。

的文件。
./pack_vectors $@
for var in "$@"
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'

为什么?

3 个答案:

答案 0 :(得分:1)

更简单的方法是使用find

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

-o相当于布尔OR

要将其分配给变量,请执行以下操作:

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

答案 1 :(得分:1)

几个可能的问题。如果要执行与中尝试的匹配的正则表达式文件匹配,则必须启用extglob。所以把

shopt -s extglob
在你的for循环之前

。如果你想在中使用posix字符类,你也在寻找[[:digit:]]。所以把它放在一起,试试

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

不引用确定“$ pack_list”是如何用上面的“.p”替换它。

答案 2 :(得分:0)

现在正在运行,有点改变BroSlow的答案:

for f in "$pack_list+([[:digit:]])"; do