당면한 문제
디렉터리 구조를 빠르게 생성하기 위해 bash 스크립트를 작성하려고 합니다. 이는 배열, 변수 조작 및 루프 사용에 대해 자세히 알아보려는 시도입니다. 내 스크립트는 디렉터리가 존재하는지 확인한 다음 폴더를 만듭니다. 내가 겪고 있는 문제는 처음 두 수준 내에 세 번째 수준 디렉터리를 만드는 것입니다.
표적
예를 들어 디렉토리 구조를 생성하는 bash 스크립트를 작성하고 싶습니다 ~/a/a/a, ~/a/a/b, ~/a/a/c,...,~/a/z/z
. 이는 적절한 배열이나 변수를 사용할 수 있도록 유연해야 합니다.
지금까지 해결한 내용은 다음과 같습니다.
#!/bin/bash
array_0=(one two three four five)
array_1=(x y z)
if [ ! -d "directory" ]; then
mkdir directory
fi
for array_0 in "${array_0[@]}"
do
mkdir ~/directory/$array_0/
done
if [ -d "~/directory/$array_0/" ]; then
for array_1 in "${array_0[@]}"
do
mkdir ~/directory/$array_0/$array_1
done
fi
exit 0
질문
내가 얻는 오류는 다음과 같습니다.mkdir: cannot create directory '/home/user/directory/one/x' : No such file or directory
~/directory
이 스크립트를 사용한 다른 시도를 통해 실패 없이 생성할 수 있지만 ~/directory/one, ~/directory/two,..., ~/directory/five
다음 레벨 /directory/one/x
등은 생성할 수 없습니다.
이 디렉터리 구조 생성을 어떻게 스크립트할 수 있습니까? 배열을 사용하여 이것이 가능합니까, 아니면 다른 방법이 있습니까?
답변1
아래와 같이 중첩된 배열 루프를 사용할 수 있습니다.
#!/bin/bash
array_0=(one two three four five)
array_1=(x y z)
for a0 in "${array_0[@]}"
do
for a1 in "${array_1[@]}"
do
mkdir -p "$HOME/web/$a0/$a1"
done
done
또는 배열을 피하고 대신 확장 목록을 사용해도 괜찮다면 이 명령은 동일한 작업을 수행합니다.
mkdir -p ~/{one,two,three,four,five}/{x,y,z}