2012-12-05 3 views

Antwort

63

Sie wollen wahrscheinlich diese:

find . -type f -print0 | wc -l --files0-from=- 

Wenn Sie nur die Gesamtzahl der Zeilen möchten, können Sie

find . -type f -exec cat {} + | wc -l 
+3

nutzlose Verwendung der Katze –

+6

@ ДМИТРИЙМАЛИКОВ Warum? –

+5

Ich habe' finden. -type f -print0 | wc -l --files0-from = -' es funktioniert gut und gibt die Summe am Ende zurück –

0

würde ich so etwas wie

find ./ -type f | xargs wc -l | cut -c 1-8 | awk '{total += $1} END {print total}' 
+0

'-nicht -type d'? –

+0

alles, was kein Verzeichnis ist; in den meisten Fällen wird das gleiche sein wie -Typ f – sge

+2

Mit Ausnahme von Block-Geräteknoten, Zeichen-Geräteknoten, Named Pipes, Sockets, ... von denen mindestens einer die gesamte Übung bricht ... Am besten zu bleiben ' type f' ... – twalberg

6

vorschlagen Vielleicht sind Sie für exec Option von find suchen.

find . -type f -exec wc -l {} \; | awk '{total += $1} END {print total}' 
+2

Dies ist ineffizient, da Sie für jede Datei ein neues "wc" erstellen. ':-(' –

+3

Auch das ist völlig kaputt, wenn Sie eine Datei wie folgt haben: versuchen 'touch $ 'Hallo \ n1000000''. Überraschung! –

-1

Bit spät, um das Spiel hier nutzen könnten, aber würde nicht das funktioniert auch? find . -type f | wc -l

Dies zählt alle Zeilen, die vom Befehl 'find' ausgegeben werden. Sie können die Suche verfeinern, um anzuzeigen, was Sie wollen. Ich verwende es, um die Anzahl der Unterverzeichnisse in einem bestimmten Unterverzeichnis in einem tiefen Baum zu zählen: find ./*/*/*/*/*/*/TOC -type d | wc -l. Ausgabe: 76435. (Nur tun, eine Suche ohne alle dazwischen Sternchen einen Fehler ergab.)

+1

Nein, ich denke, das würde so etwas wie die Anzahl der Dateien zurückgeben.Nicht die Summe aller Zeilen in allen Dateien. –

+0

Ah, sieh das jetzt. Ja, nein, würde es nicht. :) – Cronk

4

Um alle Linien für bestimmte Dateierweiterung zählen u verwenden können,

find . -name '*.fileextension' | xargs wc -l 

wenn Sie es wollen auf zwei oder mehr verschiedene Arten von Dateien u kann -o Option setzen

find . -name '*.fileextension1' -o -name '*.fileextension2' | xargs wc -l 
+2

Dies bricht jede Datei mit Leerzeichen oder '\' in seinem Namen. In der [akzeptierten Antwort] (http://stackoverflow.com/a/13728131/1081936) finden Sie Informationen dazu, wie Sie diesen Ansatz richtig anwenden können. – terdon

2

eine andere Möglichkeit wäre, einen rekursiven grep zu verwenden:

grep -hRc '' . | awk '{k+=$1}END{print k}' 

Das awk fügt einfach die Zahlen hinzu. Die grep Optionen verwendet werden:

-c, --count 
      Suppress normal output; instead print a count of matching lines 
      for each input file. With the -v, --invert-match option (see 
      below), count non-matching lines. (-c is specified by POSIX.) 
    -h, --no-filename 
      Suppress the prefixing of file names on output. This is the 
      default when there is only one file (or only standard input) to 
      search. 
    -R, --dereference-recursive 
      Read all files under each directory, recursively. Follow all 
      symbolic links, unlike -r. 

Die grep daher die Anzahl der Zeilen zählt, alles passend (‚‘), so im Wesentlichen nur die Zeilen zählt.