zsh에서 별표 경로를 재사용하는 방법은 무엇입니까?

zsh에서 별표 경로를 재사용하는 방법은 무엇입니까?

제 질문과 제목이 좋지 않을 수 있으니 미리 사과드립니다.

명령을 실행하고 싶다고 가정해 보겠습니다(구체적으로는xsdcxx)좋다 zsh:

$ xsdcxx cxx-tree schemas/core/**/*.xsd --output-dir /absolute/path/to/globbed/path

생성된 파일의 디렉터리 구조가 .xsd입력 패턴과 동일한 디렉터리에 있도록 합니다. 어떻게 해야 하나요? PowerShell에서는 매우 간단합니다( xsdcxx이미 해당 위치에 있다고 가정 PATH).

> Get-ChildItem -Recurse -Include '*.xsd' | Foreach { xsdcxx cxx-tree --output-dir $_.Directory.Fullname $_.Fullname } 

답변1

그래 zsh그거야:

for f (schemas/core/**/*.xsd) xsdcxx cxx-tree --output-dir $f:h $f

csh 또는 vim에서 like $f:h의 헤더(dirname)는 어디에 있습니까 ?$f

$f을(를) 로 변경 $f:P하고 $f:h$f:h:P(를) 얻으려면실제 경로파일과 파일 헤더를 각각 나타냅니다.

일치하는 항목이 없을 때 오류를 방지하려면 여기에서 ( 이 전역 확장이 활성화된 곳) schemas/core/**/*.xsd로 변경하는 것이 좋습니다 . 일반 파일(소켓, fifo, 디렉터리, 심볼릭 링크 등과 같은 다른 모든 유형의 파일 제외)만 포함하거나 일반 파일에 대한 심볼릭 링크도 포함합니다.schemas/core/**/*.xsd(N)Nnullglob(N.)(N-.)


1. 이는 해당 파일에 대한 표준 경로입니다. realpath()표준 기능과 마찬가지로 절대적이고 기호 링크가 없습니다. 가능한 대안 :a으로 :A설명된 수정자를 참조하세요 .info zsh modifiers

답변2

비슷한 것을 원하는 것 같습니다.

for i in schemas/core/**/*.xsd; do xsdcxx cxx-tree "$i" --output-dir "${i%/*}"; done

이는 ${i%/*}다음으로 시작하는 가장 짧은 후행 하위 문자열을 제거합니다 /(상위 디렉터리에 대한 경로를 효과적으로 생성).

관련 정보