Korzystam z, find . -name pattern
aby znaleźć jakieś pliki i chciałbym elegancko uzyskać całkowitą liczbę wierszy w tych plikach.
Jak mogę to osiągnąć?
Jeśli Twoja wersja wc
i find
obsługuje niezbędne opcje:
find . -name pattern -print0 | wc -l --files0-from=-
co daje liczbę zliczeń na plik, jak również w sumie. Jeśli chcesz tylko całość:
find . -name pattern -print0 | wc -l --files0-from=- | tail -n 1
Inną opcją dla wersji find
tego wsparcia IT:
find . -name pattern -exec cat {} + | wc -l
$ find . -name '*.txt' -exec cat '{}' \; | wc -l
Pobiera każdy plik cat
, a następnie przesyła wszystko przez wc
zestaw do trybu zliczania linii.
Lub, [nieprzetestowane] dziwne bezpieczne nazwy pliku:
$ find . -name '*.txt' -print0 | xargs -0 cat | wc -l
Niestety wynik:
find . -iname "yourpattern" -exec cat '{}' \; |wc -l
wstawia dodatkowe linie. Aby uzyskać wiarygodną liczbę linii, należy:
find . -name "yourpattern" -print0 | xargs -0 wc -l
W ten sposób poprawnie obsługujesz spacje, uzyskujesz liczbę wierszy dla każdego pliku oraz całkowitą liczbę wierszy, szybciej i stylowo !!!
Kolejny łatwy sposób na znalezienie nie. linie w pliku:
Przykład:
źródło
Nie przetestowano, ale co powiesz na:
źródło
będzie działać wydajnie.
źródło