무엇간결명령을 사용하여 텍스트 문자열이 포함되지 않은 모든 파일을 찾을 수 있습니까?
나는 성공하지 않고 이것을 시도했습니다 (-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
찾기가 작동하지만 grep
recursive( -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 *
방법 입니다.find
grep
find
다음과 같이 사용할 수 있습니다 grep
.
find . -type f ! -exec grep -q 'PATTERN' {} \; -print
-print
이는 앞의 표현식: ! -exec ... {}
이 로 평가되는 경우에만 실행됩니다 true
.
따라서 발견된 각 파일에 대해 는 ut 이고 grep -q 'PATTERN'
결과 가 이고 파일 이름이 ed 인 경우 전체 표현식 은 로 평가됩니다 .exec
false
! -exec grep -q 'PATTERN'
true
print
답변4
내 생각엔 당신이 이런 명령을 찾고 있는 것 같아요
find . -type f -execdir grep -q -v shared.php {} \; -print
이 옵션을 사용 하면 종료가 -q
가능하며 grep
사용 후 발견된 파일을 인쇄 -execdir
해야 합니다 .-print