grep
데비안 /proc
에서는 또는 /sys
. 하지만 다음을 사용하면:
--exclude-dir=/proc
또는
--exclude-dir={/proc,/sys}
또는
--exclude-dir=/proc --exclude-dir=/sys
그런 다음 grep
여전히 읽고 /sys
따라서 충돌합니다. 그러면 grep
건너뛰기 /proc
와 디렉토리를 어떻게 알 수 있나요 /sys
?
답변1
--exclude-dir
GNU 매뉴얼의 문서 grep
에 따르면
--exclude-dir=GLOB
이름 접미사가 패턴과 일치하는 모든 명령줄 디렉터리는 건너뜁니다
GLOB
. 재귀적으로 검색할 때 기본 이름과 일치하는 하위 디렉터리를 건너뜁니다GLOB
. 추가 후행 슬래시는 무시됩니다GLOB
.
보시다시피, 주어진 패턴( GLOB
)은 디렉토리의 실제 파일명에만 적용되며, 디렉토리 이름은 /
이름에 포함될 수 없으므로 유사한 패턴은 /proc
절대 일치하지 않습니다.
--exclude-dir=proc
따라서 and --exclude-dir=sys
(또는 --exclude-dir={proc,sys}
시간이 부족한 경우)를 사용해야 합니다 . 또한 이 방법은 /proc
and를 건너뛸 /sys
뿐만 아니라다른다음 이름 중 하나를 가진 디렉터리입니다.
이 두 디렉토리를 피하면서 루트부터 아래쪽으로 전체 디렉토리 트리를 재귀적으로 검색하는 또 다른 방법은 grep
from 을 사용하는 것입니다 find
.
find / \( -type d \( -path /proc -o -path /sys \) -prune \) -o \
-type f -exec grep 'PATTERN' {} +
이렇게 하면 두 가지가 감지됩니다.특정한디렉토리를 /proc
선택하고 입력을 /sys
중지하세요 . find
또한 grep
한 번에 가능한 한 큰 배치로 찾은 일반 파일을 제공합니다.
답변2
그래도 이것은 훌륭하게 작동합니다!
--exclude-dir={proc,sys}
답변3
grep은 검색 목록에서 dev/, sys/ 등으로 표시되므로 선택한 디렉토리를 검색 시 파일 이름의 기초로 사용하므로 다음을 사용하지 마십시오.
grep 'yourstring' -R --exclude-dir={/dev,/sys,/proc} /
다음을 사용해야 합니다.
grep 'yourstring '-R --exclude-dir={dev/,sys/,proc/} /