와일드카드는 따옴표 안에서 작동하지 않습니다.

와일드카드는 따옴표 안에서 작동하지 않습니다.

스크립트는 하위 디렉터리를 반복하면서 하위 디렉터리의 모든 파일 이름(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.jpgZSH에 의해 확장되지 않습니다.

"이렇게 괄호를 제거 하고 추가하면

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

와일드카드가 작동해야 합니다.

m배열이 되도록 와일드카드 패턴을 괄호로 명시적으로 묶어야 합니다 . 그렇지 않으면 m문자열이 되어 와일드카드가 완료되지 않습니다.

답변2

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

삭제되었습니다. 모든 것이 정상입니다

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

관련 정보