나는 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
*