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또는 찾은 파일에서 실행하려면 셸을 시작 해야 합니다 zsh.zcompile

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

(GNU를 포함한 일부 구현에는 현재 로케일에서 유효한 문자를 형성하지 않는 바이트 시퀀스와 일치하지 않는다는 점에서 findglob에 없는 제한 사항이 있습니다 .)findzsh*

관련 정보