하위 디렉터리를 생성하여 여러 디렉터리를 반복합니다.

하위 디렉터리를 생성하여 여러 디렉터리를 반복합니다.

아래의 각 디렉터리에 하위 디렉터리를 만들고 싶습니다. 나는 다음 루프를 사용했습니다.

#! bash

/# dir m3z m3t m3t2 m3g  m3g2 m3g3 ... n dir        
for d in m3z m3t m3t2 m3g  m3g2 m3g3 ... n dir    
do
    echo "Processing $d"    
    mkdir log #subdir
    mkdir lib #subdir 
    mkdir txt #subdir

done

그러나 동일한 레벨 디렉토리 내에 하위 디렉토리를 생성합니다.

$ ls     
m3z m3t m3t2 m3g  m3g2 m3g3 log lib txt .... n dir

나는 그들을 이렇게 얻고 싶다

$ ls /m3z    
/log /lib /txt

$ ls /m3t
/log /lib /txt
.
.
.

$ ls /n dir
/log /lib /txt

돕다?

답변1

m3*디렉토리가 존재한다고 가정하면 ,

for dir in m3z m3t m3t2 m3g m3g2 m3g3; do
    mkdir "$dir"/{log,lib,txt}
done

또는 디렉토리 목록에 중괄호 확장을 사용하세요.

mkdir {m3z,m3t,m3t2,m3g,m3g2,m3g3}/{log,lib,txt}

심지어,

mkdir m3{z,t,t2,g,g2,g3}/{log,lib,txt}

또는,

mkdir m3{z,t{,2},g{,2,3}}/{log,lib,txt}

또는 스탠드 확장 없이

for dir in m3z m3t m3t2 m3g m3g2 m3g3; do
    mkdir "$dir"/log "$dir"/lib "$dir"/txt
done

또는 루프를 통과하는 디렉토리가 아직 존재하지 않는 경우

for dir in m3z m3t m3t2 m3g m3g2 m3g3; do
    mkdir -p "$dir"/log "$dir"/lib "$dir"/txt
done

또는 루프하려는 디렉토리가 이미 존재하고 모두 패턴과 일치하는 경우 m3*/,

for dir in m3*/; do
    mkdir "$dir"/log "$dir"/lib "$dir"/txt
done

가장 중요한 것은 디렉토리를 생성하려는 하위 디렉토리를 지정하는 것입니다 $dir. 즉, 현재 루프에서 처리 중인 디렉토리의 이름입니다.

관련 정보