Wie zähle ich die Gesamtzahl der Zeilen gefundener Dateien?


10

Ich führe a aus find . -name pattern, um einige Dateien zu finden, und ich möchte die Gesamtzahl der Zeilen in diesen Dateien elegant ermitteln.

Wie kann ich das erreichen?

Antworten:


9

Wenn Ihre Version die erforderlichen Optionen unterstützt wcund findunterstützt:

find . -name pattern -print0 | wc -l --files0-from=-

Dies gibt Ihnen die Anzahl der Dateien sowie die Gesamtzahl. Wenn Sie nur die Summe wollen:

find . -name pattern -print0 | wc -l --files0-from=- | tail -n 1

Eine weitere Option für Versionen find, die dies unterstützen:

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

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

Nimmt jede Datei und cats es, leitet dann alles durch, wcum in den Zeilenzählmodus zu wechseln.

Oder [ungetesteter] seltsamer Dateiname sicher:

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

1

Leider ist die Ausgabe von:

find . -iname "yourpattern" -exec cat '{}' \; |wc -l

fügt zusätzliche Zeilen ein. Um eine zuverlässige Zeilenanzahl zu erhalten, sollten Sie Folgendes tun:

find . -name "yourpattern" -print0 | xargs -0 wc -l

Auf diese Weise können Sie Leerzeichen korrekt behandeln, eine Zeilenanzahl für jede Datei und die Gesamtzeilenanzahl schneller und stilvoller erhalten !!!


1
zB: Zeit finden. -name " .m" -exec cat '{}' \; | wc -l läuft in 4.878s und gibt 227847 als Zeilenanzahl zurück. Aber Zeit finden. -name " .m" -print0 | xargs -0 wc -l wird in 0,769s ausgeführt und gibt die richtige Zeilenanzahl 126464 zurück.
G24l

1

Ein weiterer einfacher Weg, um nein zu finden. Zeilen in einer Datei:

wc -l filename

Beispiel:

wc -l myfile.txt 

-1

Ungetestet, aber wie wäre es mit so etwas wie:

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

Dies funktioniert nicht gut mit Pfaden, die Leerzeichen oder Zeichen enthalten, die das Globbing auslösen.
Kamil Maciorowski

-2
wc -l `find -name filename`

wird effizient arbeiten.


… Oder nicht, wenn Pfade Leerzeichen oder Zeichen enthalten, die das Globbing auslösen.
Kamil Maciorowski

Und selbst wenn es funktioniert, wird die Anzahl der Zeilen in jeder Datei angegeben, was keine elegante Methode ist, um die Gesamtsumme zu erhalten (wie angefordert).
Scott
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.