unrar가 for 문에서 작동하지 않습니다. For 문을 일찍 종료하는 방법

unrar가 for 문에서 작동하지 않습니다. For 문을 일찍 종료하는 방법

다음은 for 문 내에 unrar 문을 작성하는 방법을 알아내려는 더 큰 코드의 일부입니다.

DST_DIR="/Volumes/Mac_Storage/Test_Folder"
cd "/Volumes/Mac_Storage/Test_Data"

find "$filePath" -type f "${EXT_OPTS[@]}" -exec sh -c '
for pathName do
    unzip -o '*.zip' && unrar e -r '*.rar' "$DST_DIR" && rm *.r* 
    echo "$pathName"
    printf "%s\n" "$pathName"
    sleep 1
done' sh {} +

문제가 있는 라인:

unzip -o '*.zip' && unrar e -r '*.rar' "$DST_DIR" && rm *.r*

외부에서는 잘 작동하지만 for 문에 추가하자마자 파일 이름 불일치 오류가 발생합니다.

건배

답변1

DST_DIR스크립트 내의 변수는 sh -c호출 쉘에 있는 동일한 이름의 변수와 다릅니다 find. 당신은 설정해야DST_DIR ~에script 로 사용 sh -c하거나 호출할 때 전달하세요.

find ... -exec sh -c '
    DST_DIR="/Volumes/Mac_Storage/Test_Folder"
    for pathName do
        # more code here
    done' sh {} +

여기서 변수는 내부 스크립트에서 리터럴 문자열로 값을 가져옵니다. DST_DIR변수를 다른 곳에서 사용하지 않는 경우 이전 위치에서 변수를 삭제할 수 있습니다.

또는,

find ... -exec sh -c '
    DST_DIR=$1; shift
    for pathName do
        # more code here
    done' sh "$DST_DIR" {} +

여기서 변수 값은 명령줄을 통해 외부 환경에서 내부 스크립트로 전달됩니다. 첫 번째 매개변수는 $1스크립트에 입력된 값을 보유합니다. 내부 DST_DIR변수에 할당된 후 $1밖으로 이동됩니다 $@. 그런 다음 주기는 이전과 같이 계속됩니다.

관련 정보