모든 서브 디렉토리에 디렉토리를 작성하는 방법 끝납니다.tmp1 $ [~

다음과 같은 디렉토리 구조가 있다고 가정하십시오.

$ [~ / 연습] ls
a / b / c / d /

이제 tmp1모든 하위 디렉토리에 디렉토리를 practice만들고 싶습니다.

$ [~ / 연습] mkdir * / tmp1
mkdir :`* / tmp1 '디렉토리를 만들 수 없습니다 : 그러한 파일이나 디렉토리가 없습니다

그런 다음 -p스위치를 시도하고 *하위 디렉토리로 이름이 지정된 디렉토리로 끝납니다.tmp1

$ [~ / 연습] mkdir -p * / tmp1

$ [~ / 연습] ls
* / a / b / c / d /

-p존재하지 않는 디렉토리를 여러 개 만드는 것이 스위치 사용이라는 것을 알고 있습니다 . 나는 그것이 도움이 될 것이라고 생각했습니다.

tmp1모든 서브 디렉토리에서 한 번에 작성하는 방법

이 작업을 수행 할 수있는 경우, 어떻게 그것을 만들 확장 할 \tmp1, \tmp2, \tmp3\a, \b그리고 \c한 번에?

편집 : 나는 디렉토리가 간단하고 순서 등이 될 필요가 없다는 언급 놓친 a, b, c등, 그리고 생성 할 디렉토리와 같은 필요는 없다 tmp1, tmp2.

$ [~ / 연습] ls
개 / 고양이 / 쥐 /

그들에서, 나는 같은 것을 갖고 싶습니다

$ [~ / 연습] ls *
개:
빨강, 파랑/

고양이:
빨강, 파랑/

쥐:
빨강, 파랑/


답변

globs의 :

for dir in */; do mkdir -- "$dir/tmp1"; done

노트

  • 나는 */글로브 로 사용하는 작은 해킹으로 다이어 (다이어리에 대한 심볼릭 링크 포함) 만 취급합니다.
  • 한 번에 여러 개의 하위 디렉토리를 작성하려면 다음을 수행하십시오.

    for dir in */; do mkdir -- "$dir"/{tmp1,foo,bar,qux}; done


답변

[…] \ a, \ b 및 \ c에 \ tmp1, \ tmp2, \ tmp3을 한 번에 만들도록 어떻게 확장합니까?

 mkdir {a,b,c}/tmp{1,2,3}

답변

GNU 또는 BSD *로 다음을 찾으십시오.

find -mindepth 1 -maxdepth 1 -type d -exec mkdir {}/newdir \;

또는 매개 변수 확장 사용 :

dirs=(*/)
mkdir -- "${dirs[@]/%/newdir}"

* OS X 포함


답변

을 언급 한 이후로 주제 bash를 벗어 났지만 zsh를 사용하면 레코드에 대해 다음을 수행 할 수 있습니다.

dirs=(*(/))
mkdir -- $^dirs/tmp1

$^var배열 확장을 위해 중괄호와 같은 확장을 켭니다 . rc^연산자와 rc(또는 그 파생어 es)를 연상케 합니다.

dirs=(*/)
mkdir -- $dirs^tmp1

그러나 rc 솔루션 dirs에는 디렉토리에 대한 심볼릭 링크도 포함되어 있습니다 ( 여기에 제공된 bash 솔루션에도 동일하게 적용됨) . zsh을 솔루션에서 변화 *(/)*(-/)원하는 경우는 디렉토리에 심볼릭 링크를 포함합니다.


답변

이식 가능하게 상위 디렉토리를 반복하십시오.

for d in */; do mkdir "$d/red" "$d/blue"; done

이름이로 시작하는 디렉토리가 있으면 --뒤에 추가하십시오 .mkdir-

zsh에서는 e glob 한정자를 사용하여 단일 명령으로 수행 할 수 있습니다 .

mkdir *(/e\''REPLY=($REPLY/{red,blue})'\')

그러나 이것을 두 개의 명령으로 입력하는 것이 더 빠릅니다.

d=(*(/)); mkdir $^d/{red,blue}

답변

당신은 그렇게 할 수 있습니다 :

mkdir {a,b,c,d}/tmp1

답변

디렉토리가 아닌 파일을 피하는 sputnick의 답변 변형 :

for x in *; do if [ -d "$x" ]; then mkdir "$x/tmp1"; fi; done