私はzshに初めて触れたので、私の概念全体が間違っているかもしれませんが、zcompile
次のコマンドで実行すると、私のシステムがそれを見つけることができないことがわかりました。find
find . -type f -not -name "*.zwc" -exec zcompile {} \;
私が得るエラーは次のとおりです。
find: zcompile: No such file or directory
しかし、zcompile
プロンプトで実行でき、.zwc
問題はありません。バッチがfind
機能しない理由を知っている人はいますか?
ベストアンサー1
zcompile
zsh
シェル内でのみ使用できるシェル組み込みコマンドです。find
シェルとは別のコマンドなので動作しません。
zsh
グローバル変数はfind
ここで簡単に変更できます。
set -o extendedglob # for ^, best in ~/.zshrc
for file (./**/^*.zwc(N.)) zcompile $file
D
(隠しファイルと隠しディレクトリのファイルはここから省略され、glob修飾子を追加しない場合はより良い選択になる可能性があります)。
これを使用するにはリストを出力する必要があり、find
シェルはリストを検索して組み込み関数に渡します。それは次のとおりです。find
zcompile
find . ! -name "*.zwc" -type f -print0 |
while IFS= read -rd '' file; do
zcompile $file
done
find
または、見つかったファイルで実行するにはシェルを起動する必要がありますzsh
。zcompile
find . ! -name "*.zwc" -type f -exec zsh -c '
for file do
zcompile $file
done' zsh {} +
(GNUを含むいくつかの実装には、現在のロケールで有効な文字を形成しないバイトシーケンスと一致しないという点でfind
globにはない制限があります。)find
zsh
*