Jak mogę policzyć liczbę plików (w katalogu) zawierających dany ciąg jako dane wejściowe w bash / sh?
Jak mogę policzyć liczbę plików (w katalogu) zawierających dany ciąg jako dane wejściowe w bash / sh?
Odpowiedzi:
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.
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.
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:
grep -lZ "$pattern" * | tr -cd '\000' | wc -c
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
.