find コマンドで zcompile が見つかりません。

find コマンドで zcompile が見つかりません。

私はzshに初めて触れたので、私の概念全体が間違っているかもしれませんが、zcompile次のコマンドで実行すると、私のシステムがそれを見つけることができないことがわかりました。find

find . -type f -not -name "*.zwc" -exec zcompile {} \;

私が得るエラーは次のとおりです。

find: zcompile: No such file or directory

しかし、zcompileプロンプトで実行でき、.zwc問題はありません。バッチがfind機能しない理由を知っている人はいますか?

ベストアンサー1

zcompilezshシェル内でのみ使用できるシェル組み込みコマンドです。findシェルとは別のコマンドなので動作しません。

zshグローバル変数はfindここで簡単に変更できます。

set -o extendedglob # for ^, best in ~/.zshrc
for file (./**/^*.zwc(N.)) zcompile $file

D(隠しファイルと隠しディレクトリのファイルはここから省略され、glob修飾子を追加しない場合はより良い選択になる可能性があります)。

これを使用するにはリストを出力する必要があり、findシェルはリストを検索して組み込み関数に渡します。それは次のとおりです。findzcompile

find . ! -name "*.zwc" -type f -print0 |
  while IFS= read -rd '' file; do
    zcompile $file
  done

findまたは、見つかったファイルで実行するにはシェルを起動する必要がありますzshzcompile

find . ! -name "*.zwc" -type f -exec zsh -c '
  for file do
    zcompile $file
  done' zsh {} +

(GNUを含むいくつかの実装には、現在のロケールで有効な文字を形成しないバイトシーケンスと一致しないという点でfindglobにはない制限があります。)findzsh*

おすすめ記事