OSX에서 grep --exclude-dir 사용

OSX에서 grep --exclude-dir 사용

"기본 대화형 셸"이라는 텍스트가 포함된 파일을 찾으려고 합니다. 다음 grep 명령을 사용하여 찾으려고 합니다.

grep -r --exclude-dir='/{var,Volumes,bin,cores,dev,sbin,tmp,usr}' "The default interactive shell" /

그러나 /usr다음 오류 메시지에 표시된 것처럼 여전히 검색합니다.

grep: /usr/bin/sudo: Permission denied

여러 옵션을 작성하지 않고 재귀 grep을 수행하고 여러 디렉터리를 제외하는 방법은 무엇입니까 --exclude-dir? 시스템은 OSX 10.15.4입니다.

답변1

리터럴 이름을 가진 디렉토리를 제외하고 있습니다 /{var,Volumes,bin,cores,dev,sbin,tmp,usr}. 이는 작은따옴표로 인해 발생합니다. 중괄호 확장이 인용되면 더 이상 중괄호 확장이 아니라 일반 텍스트일 뿐입니다.

중괄호를 올바르게 확장하려면 따옴표를 제거하십시오.

grep -R --exclude-dir=/{var,Volumes,bin,cores,dev,sbin,tmp,usr} \
    -F 'The default interactive shell' /

-F정규식 대신 문자열을 사용하여 검색하기 때문에 추가했습니다 .

답변2

나도 같은 일을하고 있습니다 ...

OSX Big Sur에서 bash 터미널을 실행하면 다음 메시지가 표시됩니다...

"기본 대화형 셸은 이제 zsh입니다. zsh를 사용하도록 계정을 업데이트하려면 를 실행하세요 chsh -s /bin/zsh. 자세한 내용을 보려면 다음을 방문하세요.https://support.apple.com/kb/HT208050. "

그래서 "기본 대화형 셸"이라는 단어가 포함된 파일을 찾았습니다. 그런 문서를 찾지 못했습니다.

"Default Interactive Shell, etc."라는 메시지가 실제로 bash에 하드코딩되어 있는 것으로 나타났습니다.

hexdump -C /bin/bash 생성...

000775c0 6e 2f 7a 73 68 00 0a 54 68 65 20 64 65 66 61 75 |n/zsh..기본|

000775d0 6c 74 20 69 6e 74 65 72 61 63 74 69 76 65 20 73 |lt 대화형 |

000775e0 68 65 6c 6c 20 69 73 20 6e 6f 77 20 7a 73 68 2e | 지옥은 이제 zsh입니다. |

(참고: 내 $BASH_VERSION은 3.2.57(1) 릴리스입니다.)

(참고: Bash에는 많은 ASCII 메시지가 하드코딩되어 있습니다.)

이 경고는 ~/.bash_profile 내보내기 BASH_SILENCE_DEPRECATION_WARNING=1에 다음 줄을 추가하여 억제할 수 있습니다.

이안 제임스

관련 정보