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%/*}により、次に始まる最短の末尾部分文字列が削除されます/(親ディレクトリへのパスを効果的に生成します)。

関連情報