Liczba plików zawierających podany ciąg


19

Jak mogę policzyć liczbę plików (w katalogu) zawierających dany ciąg jako dane wejściowe w bash / sh?

Odpowiedzi:


30

grep -l "string" * | wc -l wyszuka „ciąg” w treści wszystkich plików w katalogu roboczym i poda liczbę pasujących.


1
To nie zadziała, jeśli w katalogu jest dużo plików, wygeneruje błąd „zsh: lista argumentów za długa: grep”. Wszelkie pomysły, jak się tego pozbyć?

1
@ user16142 grep katalog zamiast plików: grep -lr "string" directory | wc -lJeśli nie chcesz wyszukiwania rekurencyjnego, możesz użyć opcji find z opcją maxdepth: find directory -maxdepth 1 -type f -exec grep -l "string" {} + | wc -lPamiętaj, że ta druga opcja jest wolniejsza niż grep.
Agargara,

9

grepParametr s -lwyświetli tylko pasujące nazwy plików $PATTERN, wcmoże je później policzyć.

grep -l "$PATTERN" * | wc -l

dzięki, ale zastanawiałem się nad wzorem w pliku ... przepraszam za dwuznaczne pytanie

Jeśli tak, weź odpowiedź Wolfa.
mach

3
awk '/pattern_to_look_for/ {s+=1; nextfile;} END {print s}' *

Wyjaśnienie: Wyszukuje liczbę plików, które mają „pattern_to_look_for” w swojej zawartości, a nie w nazwach plików (jak odpowiedź Waga). Z twojego pytania trudno jest powiedzieć, czego szukasz.


Ale czegoś brakuje? ponieważ to nie działa

Jeśli szukasz kaczki sznurkowej, musisz napisać ją jak / duck / w Awk. Robisz to
Jan Persson

tak, wynik: awk: błąd odczytu (jest katalogiem)

Odpowiedź Wolfa da ci duplikaty. Jeśli w jednym z plików występuje kilka wystąpień szukanego ciągu, będzie on liczony jako dodatkowe dopasowanie.
Jan Persson

Cóż, jeśli masz katalogi w folderze, musisz zrobić kilka dodatkowych rzeczy, takich jak zastąpienie gwiazdy czymś takim find . ! -name . -prune -type f(nie przegap backsticksa). To polecenie wyświetla tylko pliki w folderze.
Jan Persson

2

Działa to w Bash z dowolną nazwą pliku:

grep -lZ "$pattern" * | tr -cd '\000' | wc -c

Wyjaśnienie:

  • grep„s -Zopcja drukuje każdy wynik z separatorem ␀ bajtów. Ten znak nie może być częścią nazwy pliku, więc możemy po prostu policzyć liczbę separatorów, aby uzyskać liczbę plików.
  • Aby pozbyć się innych znaków na wyjściu, po prostu usuwamy wszystko oprócz ␀ bajtów za pomocą tr.
  • Następnie policz znaki za pomocą wc.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.