通配符在引号中不起作用

通配符在引号中不起作用

该脚本应该循环子目录并匹配子目录中的所有文件名(FLA.*Image.*file.jpg 和 FLA.*Image.jpg)并对其进行处理。它还在子目录中创建输出文件夹来存储结果。但该脚本无法识别通配符。

#!/bin/zsh

app="myapp" #my app exe location

for f in **/** ; do

    if [ -d $f ]; then
        m=$f/"FLA.*Image.*file.jpg" # match filename to process
        base_o="$f/output"
        if [[ ! $f =~ "output_.*" ]]; then  
            (
            for file in $f/*.jpg ; do
                o="${base_o}_${file:t:r:u}"
                o=${o%-*}
                if [ $f != $o ] && [ $file != $m ] && 
                        [[ ${file:t} =~ "FLA.*Image.jpg" ]]; then
                    echo "*** Processing the folder $f ***" 
                    if [ ! -d $o ]; then mkdir $o; fi
                    $app ${file} ${o} ${m}
                fi
            done
            )
        fi
    fi
done

return 0 

答案1

"FLA.*Image.*file.jpg"字面意思 FLA.*Image.*file.jpg,不会被ZSH扩展。

如果删除"并添加括号,就像这样

m=($f/FLA.*Image.*file.jpg)

通配符应该可以工作。

您必须用括号显式地将通配符模式括起来,以便它m是一个数组,否则m是一个字符串并且通配符不会完成。

答案2

m=($f/FLA.*Image.*file.jpg)

删除了。一切正常

m=($f/FLA*Image*file.jpg)

相关内容