私の質問やタイトルが悪いかもしれないので、事前に謝罪します。
コマンドを実行したいとします(具体的には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%/*}
により、次に始まる最短の末尾部分文字列が削除されます/
(親ディレクトリへのパスを効果的に生成します)。