제 질문과 제목이 좋지 않을 수 있으니 미리 사과드립니다.
명령을 실행하고 싶다고 가정해 보겠습니다(구체적으로는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)
N
nullglob
(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%/*}
다음으로 시작하는 가장 짧은 후행 하위 문자열을 제거합니다 /
(상위 디렉터리에 대한 경로를 효과적으로 생성).