텍스트 문자열이 포함되지 않은 모든 파일을 찾는 방법은 무엇입니까?

텍스트 문자열이 포함되지 않은 모든 파일을 찾는 방법은 무엇입니까?

무엇간결명령을 사용하여 텍스트 문자열이 포함되지 않은 모든 파일을 찾을 수 있습니까?

나는 성공하지 않고 이것을 시도했습니다 (-v를 사용하여 grep의 매개 변수를 뒤집음).

find . -exec grep -v -l shared.php {} \;

어떤 사람들은 이것이 효과가 있다고 말합니다:

find . ! -exec grep -l shared.php {} \;

그러나 이것은 나에게 효과가 없는 것 같습니다.

이 페이지다음과 같은 예가 있습니다.

find ./logs -size +1c  > t._tmp
while read filename
do
     grep -q "Process Complete" $filename
     if [ $? -ne 0 ] ; then
             echo $filename
     fi
done < t._tmp
rm -f t_tmp

그러나 이는 번거롭고 전혀 간결하지 않습니다.

ps: 이것이 가능하다는 것을 알고 있지만 grep -L *실제로 알고 싶은 것은 grep과 함께 find 명령을 사용하여 파일을 제외하는 방법입니다.

pss: 또한 구문을 사용하여 grep이 하위 디렉터리를 포함하도록 하는 방법을 잘 모르겠지만 grep -L *여전히 사용 방법을 알고 싶습니다 find. :)

答え1

-v -l(일치하지 않는 줄이 있는 파일)을 (일치하는 줄이 없는 파일)로 변경하면 -L찾기가 작동하지만 greprecursive( -r) 옵션을 사용할 수도 있습니다.

grep -rL shared.php .

答え2

find . -type f | xargs grep -H -c 'shared.php' | grep 0$ | cut -d':' -f1    

또는

find . -type f -exec grep -H -c 'shared.php' {} \; | grep 0$ | cut -d':' -f1

-c여기서는 파일에서 일치하는 줄 수를 계산합니다 (다음을 사용).

答え3

이것이 효과가 있다는 것을 알고 있지만, 제가 정말로 알고 싶은 것은 이 명령을 다음과 함께 사용하여 파일을 제외하는 grep -L *방법 입니다.findgrep

find다음과 같이 사용할 수 있습니다 grep.

find . -type f ! -exec grep -q 'PATTERN' {} \; -print

-print이는 앞의 표현식: ! -exec ... {}이 로 평가되는 경우에만 실행됩니다 true.
따라서 발견된 각 파일에 대해 는 ut 이고 grep -q 'PATTERN'결과 가 이고 파일 이름이 ed 인 경우 전체 표현식 은 로 평가됩니다 .execfalse! -exec grep -q 'PATTERN'trueprint

答え4

내 생각엔 당신이 이런 명령을 찾고 있는 것 같아요

find . -type f -execdir grep -q -v shared.php {} \; -print

이 옵션을 사용 하면 종료가 -q가능하며 grep사용 후 발견된 파일을 인쇄 -execdir해야 합니다 .-print

関連情報