该脚本应该循环子目录并匹配子目录中的所有文件名(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)