Jak policzyć całkowitą liczbę wierszy znalezionych plików?


10

Korzystam z, find . -name patternaby znaleźć jakieś pliki i chciałbym elegancko uzyskać całkowitą liczbę wierszy w tych plikach.

Jak mogę to osiągnąć?

Odpowiedzi:


9

Jeśli Twoja wersja wci findobsł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 findtego wsparcia IT:

find . -name pattern -exec cat {} + | wc -l 

2
$ find . -name '*.txt' -exec cat '{}' \; | wc -l

Pobiera każdy plik cat, a następnie przesyła wszystko przez wczestaw do trybu zliczania linii.

Lub, [nieprzetestowane] dziwne bezpieczne nazwy pliku:

$ find . -name '*.txt' -print0 | xargs -0 cat | wc -l

1

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 !!!


1
np .: znaleźć czas. -nazwa „ .m” -exec cat „{}” \; | wc -l działa w 4.878s i zwraca 227847 jako liczbę wierszy. Ale czas znajdź. -nazwa „ .m” -print0 | xargs -0 wc -l działa w ciągu 0,769 s i zwraca prawidłową liczbę wierszy 126464.
g24l

1

Kolejny łatwy sposób na znalezienie nie. linie w pliku:

wc -l filename

Przykład:

wc -l myfile.txt 

-1

Nie przetestowano, ale co powiesz na:

cat `find . -name "searchterm" -print` | wc -l

Nie zadziała to dobrze ze ścieżkami zawierającymi spacje lub znaki, które powodują globowanie.
Kamil Maciorowski,

-2
wc -l `find -name filename`

będzie działać wydajnie.


… Czy nie, jeśli ścieżki zawierają spacje lub znaki, które powodują globowanie.
Kamil Maciorowski,

I nawet jeśli działa, raportuje liczbę wierszy w każdym pliku, co nie jest eleganckim sposobem na uzyskanie sumy (zgodnie z żądaniem).
Scott,
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.