Jak mogę policzyć liczbę plików (w katalogu) zawierających dany ciąg jako dane wejściowe w bash / sh?
19
grep -l "string" * | wc -l
wyszuka „ciąg” w treści wszystkich plików w katalogu roboczym i poda liczbę pasujących.
grep -lr "string" directory | wc -l
Jeś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 -l
Pamiętaj, że ta druga opcja jest wolniejsza niż grep.grep
Parametr s-l
wyświetli tylko pasujące nazwy plików$PATTERN
,wc
może je później policzyć.źródło
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.
źródło
find . ! -name . -prune -type f
(nie przegap backsticksa). To polecenie wyświetla tylko pliki w folderze.Działa to w Bash z dowolną nazwą pliku:
Wyjaśnienie:
grep
„s-Z
opcja 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.tr
.wc
.źródło