![mkdir 및 seq 명령 문제](https://linux55.com/image/119757/mkdir%20%EB%B0%8F%20seq%20%EB%AA%85%EB%A0%B9%20%EB%AC%B8%EC%A0%9C.png)
명령줄 mkdir
과 seq
.
내가 사용하는 경우:
mkdir name{`seq -s , 1 5`}
결과는 디렉토리입니다:name{1,2,3,4,5}
어떤 명령을 사용해야 합니까?
답변1
seq 1 42 | mkdir name{1..5}
또는 인생, 우주 및 모든 것에 대한 답이 필요하지 않다면 포기 seq
하고 bash의 중괄호 확장이 작업 자체를 수행하도록 하십시오.
mkdir name{1..5}
그러나 사용해야 하는 경우 seq
숙제이므로 다음을 수행하십시오.
mkdir $(seq -f "name%d" 5)
답변2
어떤 이유로든 원하지 않는 경우버팀대 확장 사용(아래 참조) 다음을 고려할 수 있습니다.
seq 5 | xargs -I N mkdir nameN
그러면 name1
, name2
, name3
및 name4
가 생성됩니다 name5
. 이는 쉘이 중괄호 확장을 지원하지 않는 경우에도 bash
작동합니다 (하지만 지원합니다). 이 xargs
명령은 명령을 빌드하고 실행합니다. 이 특정 xargs
명령은 유사한 명령을 실행 mkdir nameN
하지만 N
입력된 모든 단어(파이프의 입력 seq
)를 대체합니다. 달리 man xargs
거나 읽다이 페이지이 -I
옵션에 대한 추가 정보.
숙제라면 세 번째 명령( xargs
)을 사용하지 못할 수도 있습니다. 그러나 "실생활"에서는 그러한 제한이 있을 가능성이 거의 없습니다. 또한 학습 목적으로 이 작업을 수행하는 경우 다양한 상황에서 유용할 수 있는 명령을 배울 수 있는 기회입니다 xargs
(아직 모르는 경우).
다음과 같은 쉘 루프를 사용할 수도 있습니다.Alex P가 제안한 것( for d in $(seq 5); do mkdir name$d; done
). 저것for
반지구문을 사용 $(
)
하여 실행명령 대체1 2 3 4 5
그런 다음 목록을 얻으려면 다음을 seq
사용하십시오.매개변수 확장( $d
)는 mkdir
각 명령의 디렉터리 이름을 구성합니다.
이러한 모든 방법은 공백이 포함되지 않은 디렉터리 이름에 의존한다는 점을 알아야 합니다. 단, 공백이 포함되지 않도록 수정할 수는 있습니다.
하지만 당신은 bash
다음과 같이 사용하고 있습니다많은 껍질, 지원하는버팀대 확장. 이제 스크립트가 필요할 수도 있습니다.가지고 다닐 수 있는지원되지 않는 쉘의 경우(예:dash
). 그것이 필요한 전부라면 중괄호 확장을 전혀 사용해서는 안됩니다. 그렇지 않으면따르다제프 샬러가 추천함그냥 쓰세요mkdir name{1..5}
.