나는 다음과 같은 것을 가지고 있습니다 :
% ls -1dF /tmp/foo/*
/tmp/foo/000f9e956feab3ee4625aebb65ae7bae9533cdbc/
/tmp/foo/002e34c2218f2c86fefd2876f0e5c2559c5fb3c4/
/tmp/foo/00b483576791bab751e6cb7ee0a7143af43a8069/
.
.
.
/tmp/foo/fedd0f7b545e7ae9600142656756456bc16874d3/
/tmp/foo/ff51ac87609012137cfcb02f36624f81cdc10788/
/tmp/foo/ff8b983a7411395344cad64182cb17e7cdefa55e/
bar
. 아래의 각 하위 디렉터리 아래에 디렉터리를 만들고 싶습니다 foo
.
내가 이걸 하려고 하면
% mkdir -p /tmp/foo/*/bar
...오류가 발생했습니다.
zsh: no matches found: /tmp/foo/*/bar
(돌이켜보면 오류의 원인을 알 수 있습니다.)
zsh
for 루프를 사용하여 원래 문제를 해결할 수 있다는 것을 알고 있지만 단일 호출에 필요한 매개변수를 생성하는 매개변수 확장 형식에 대한 지원이 있는지 궁금합니다 mkdir -p
. IOW, 매개변수 확장은 " /bar
확장에 의해 생성된 모든 접두사에 추가"하는 것과 동일합니다 /tmp/foo/*
.
% mkdir -p /tmp/foo/000f9e956feab3ee4625aebb65ae7bae9533cdbc/bar ... /tmp/foo/ff8b983a7411395344cad64182cb17e7cdefa55e/bar
답변1
setopt histsubstpattern extendedglob
mkdir -p /tmp/foo/*(#q/:s_%_/bar_)
이것은확장된 와일드카드q
유엣이 있다글로벌 로고사용하다글로벌 예선디렉토리만 일치하고수정자교체 s
수행( %
다음에서만 사용)역사적 대안 모델패턴), 각 단어에 문자열을 추가합니다.
man zshexpn
답변2
물론 - 루프를 사용하세요
for n in /tmp/foo/*; do mkdir "$n/bar";done
glob은 목록을 확장하는 데 사용됩니다.기존의아직 만들어지지 않은 것이 아닌 프로젝트.
답변3
디렉토리가 배열인 경우 ${^...}
확장 형식을 사용할 수 있습니다.
a=(/tmp/foo/*/)
mkdir -p ${^a}bar
답변4
@loa_in_이 대부분을 가지고 있지만 파이핑 find
출력은 종종 가짜입니다.
find /tmp/foo -maxdepth 1 -mindepth 1 -type d -exec mkdir {}/bar \;