다음은 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
밖으로 이동됩니다 $@
. 그런 다음 주기는 이전과 같이 계속됩니다.