당면한 문제

당면한 문제

당면한 문제

디렉터리 구조를 빠르게 생성하기 위해 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}

관련 정보