mkdir 및 seq 명령 문제

mkdir 및 seq 명령 문제

명령줄 mkdirseq.

내가 사용하는 경우:

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, name3name4가 생성됩니다 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}.

관련 정보