2015-01-22 2 views
0

Bash에서는 여러 흩어져있는 파일에서 문자열을 찾으려고합니다.find + grep을 사용하여 디렉토리를 어떻게 제외합니까?

내가 제외하기 위해 노력하고있어 그렙 액세스/SYS의 오류 수천 수 :

find/-type f ! -path "/sys" -exec grep -l StringToFind {} \; 
find/-type f -exec grep -l --exclude-dir="/sys" StringToFind {} \; 

누군가가 설명 할 수 왜 위의 작품도? grep -v와 egrep을 사용하여 몇 가지 다른 변형을 시도했지만 성공하지 못했습니다.

여러 디렉토리 및 패턴을 제외하는 방법은 어떻습니까?

+0

grep에 파이프 할 필요가 있습니까? 즉 find/-type f! -path "/ sys"-exec | grep -l StringToFind {} \;' –

+0

exec가 아닌 마이클이 인수를 필요로합니다. –

+0

이것을 시도해보십시오'find/-type f -exec grep string "{}"\; -o -name "/ sys"-prune' –

답변

0

-path "/sys"

  • 당신은 정확한 디렉토리 (또는 파일) /sys 및 대한 진실하지 만 사실이다 find의 절대 경로를 제공하고 문제의 몇 가지가 있습니다 하위 디렉토리. 당신이 /sys 아래 아무것도 사실로 그것을 원하는 경우, 그 아래에 파일 오류를
  • -path 디렉토리를 탐색로부터 정지 -find하지 않습니다, 그래서 당신은 여전히 ​​얻을 수 있습니다 (모두) -path "/sys/*" 또는 ! -path "/sys" ! -path "/sys/* 했어야

시도

find/-path "/sys" -prune -o -type f -exec grep -l StringToFind {} + 

또는 더 나은 아직 (당신은 정확한 인수 /sys을 ecluding하고 비 반복적이기 때문에 당신의 --exclude-dir-find 비슷한 이유로 실패 - 어떤 find 어쨌든 전달하지 않음)

grep -r -l --exclude-dir="/sys" StringToFind/
관련 문제