아래의 각 디렉터리에 하위 디렉터리를 만들고 싶습니다. 나는 다음 루프를 사용했습니다.
#! 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
. 즉, 현재 루프에서 처리 중인 디렉토리의 이름입니다.