이름에 공백이 포함된 디렉터리를 반복합니다.

이름에 공백이 포함된 디렉터리를 반복합니다.

디렉터리를 반복하고 디렉터리 이름과 일치하도록 하위 디렉터리의 파일 이름을 바꾸는 스크립트를 작성하려고 합니다. 디렉토리 이름에 공백이 포함되어 있으면 이름이 분할되어 필요한 대로 아무 것도 할 수 없는 문제가 있습니다.

예를 들어 폴더 구조는 다음과 같습니다.

TopLevel
->this is a test
-->test.txt

지금까지 내 스크립트는 다음과 같습니다

#!/bin/sh
topLevel="/dir1/dir2/TopLevel"
for dir in $(ls $topLevel)
do
    echo $dir # for testing purposes to make sure i'm getting the right thing
    # Get name of directory - i know how to do this
    # Rename file to match the name of the directory, with the existing extension - i know how to do this
done

내 예상 결과는

/dir1/dir2/TopLevel/this is a test

그러나 실제 출력은

this
is
a
test

누구든지 올바른 방향으로 나를 가리킬 수 있습니까? 오랜만에 쉘스크립팅을 해봤습니다. 이 스크립트를 한 번에 하나씩 완료하려고 하는데 반복을 완료하는 데 막힌 것 같습니다.

답변1

이것이 이 작업을 수행해야 하는 주요 이유 중 하나입니다.출력을 구문 분석하지 마십시오.ls. 쉘 글로브만 사용하는 경우 다음을 수행할 수 있습니다.

for dir in /dir1/dir2/TopLevel/*/
do
    echo "$dir" ## note the quotes, those are essential
done

논평

  • for dir in /dir1/dir2/TopLevel/*/단지 디렉토리를 반복하는 것 대신에 제가 어떻게 사용하고 있는지 주목하세요 for dir in /dir1/dir2/TopLevel/*. 디렉토리와 파일을 원하면 for f in /dir1/dir2/TopLevel/*.

  • 주변 따옴표는 $dir필수적이며 특히 변수에 공백이 포함된 경우 변수를 항상 인용해야 합니다.

추가 자료:

관련 정보