스크립트는 하위 디렉터리를 반복하면서 하위 디렉터리의 모든 파일 이름(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)