아래와 같이 폴더 구조를 만들고 싶은 시나리오가 있습니다. for
이런 방식으로 이 구조를 생성하는 루프를 작성하려면 어떻게 해야 합니까 ?
ABC [Parent folder]
-> A1 [child folder]
-> B1 [child folder]
-> C1 [child folder]
-> W1 [child folder]
-> W2 [child folder]
-> W3 [child folder]
-> V1 [child folder]
-> V2 [child folder]
-> V3 [child folder]
다음과 같은 파일을 전달하겠습니다.
ABC|A1|B1|C1
ABC|W1|W2|W3
ABC|V1|V2|V3
노트:
위 파일 내용을 입력으로 받아 폴더가 생성되어야 합니다.
#ABC - MAIN PARENT DIRECTORY
#REMAINING AFTER ABC are child folders
답변1
사용세게 때리다, 표준 방식:
while IFS='|' read -r maindir subdir1 subdir2 subdir3; do
mkdir -p "$maindir/$subdir1" "$maindir/$subdir2" "$maindir/$subdir3"
done < file
산출
$ tree ABC
ABC
├── A1
├── B1
├── C1
├── V1
├── V2
├── V3
├── W1
├── W2
└── W3
답변2
입력 파일을 신뢰하는 경우 이를 일련의 셸 명령으로 변환하여 실행할 수 있습니다.
sed 's/^/mkdir -p /;sX|X/{X;s/|/,/g;s/$/}/' file | bash
이런 선으로 바뀌게 됩니다
ABC|A1|B1|C1
입력하다
mkdir -p ABC/{A1,B1,C1}
이는 단지 3개의 항목이 아닌 첫 번째 항목 이후의 하나 이상의 항목에 적용됩니다.
답변3
사용 awk
:
awk -F\| '{pdir=$1; for (i=2;i<=NF;i++) {sdir=pdir"/"$i; system("mkdir -p "sdir)}}' input
이는 파일의 각 줄을 반복하고 pdir
첫 번째 필드로 설정한 다음 2에서 시작하여 각 필드를 반복하고 sdir
로 설정합니다 pdir/field
. 그런 다음 system()
함수를 사용하여 호출 mkdir
하고 -p
필요한 경우 상위 디렉터리를 생성하도록 선택합니다. 디렉토리가 이미 존재하면 경고하지 않습니다.
답변4
단숨에 뱉어내세요.
mkdir -p ABC/{A,B,C}1 ABC/{V,W}{1,2,3}