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

zcompile是一个zsh只能从 shell 内部使用的 shell 内置命令,find是与 shell 分开的命令,因此无法工作。

zsh全局变量可以find在这里轻松替换:

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

(这里省略隐藏文件和隐藏目录中的文件,这可能是更好的选择;如果不添加Dglob 限定符)。

如果您想使用find,则需要find输出列表,并且 shell 检索该列表以将其传递给其zcompile内置函数。就像是:

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

或者您需要find启动一个shell 来在找到的文件上zsh运行它:zcompile

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

(请注意,某些find实现(包括 GNU )具有glob 没有的find限制,因为它们不会匹配在当前语言环境中不形成有效字符的字节序列)。zsh*

相关内容