2057 Stimmen

Wie kann ich alle Codezeilen in einem Verzeichnis rekursiv zählen?

Wir haben eine PHP-Anwendung und wollen alle Codezeilen in einem bestimmten Verzeichnis und seinen Unterverzeichnissen zählen.

Wir brauchen die Kommentare nicht zu ignorieren, da wir nur versuchen, uns einen groben Überblick zu verschaffen.

wc -l *.php 

Dieser Befehl funktioniert gut für ein bestimmtes Verzeichnis, aber er ignoriert Unterverzeichnisse. Ich dachte, der folgende Kommentar könnte funktionieren, aber er gibt 74 zurück, was definitiv nicht der Fall ist...

find . -name '*.php' | wc -l

Wie lautet die korrekte Syntax, um alle Dateien eines Verzeichnisses resursiv einzugeben?

3269voto

Peter Elespuru Punkte 30805

Versuchen Sie es:

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

oder (wenn Dateinamen Sonderzeichen wie Leerzeichen enthalten)

find . -name '*.php' | sed 's/.*/"&"/' | xargs  wc -l

Das SLOCCount-Werkzeug kann ebenfalls helfen.

Es wird eine genaue Anzahl von Quellcodezeilen für alle Hierarchie, auf die Sie es richten, sowie einige zusätzliche Statistiken.

Sortierte Ausgabe:

find . -name '*.php' | xargs wc -l | sort -nr

46 Stimmen

cloc.sourceforge.net könnte als Alternative zu Sloccount in Frage kommen (mehr Sprachen, aber weniger Informationen)

38 Stimmen

Auch mit Include-Dateien: find . -name '*.php' -o -name '*.inc' | xargs wc -l

61 Stimmen

Wenn es viele Dateien gibt, wird mehr als eine Nummer gedruckt (weil wc wird mehrfach ausgeführt. Außerdem werden viele spezielle Dateinamen nicht verarbeitet.

595voto

simao Punkte 12981

Sie können die cloc ein Dienstprogramm, das genau für diesen Zweck entwickelt wurde. Es meldet die Anzahl der Zeilen in jeder Sprache und gibt an, wie viele davon Kommentare sind usw. CLOC ist für Linux, Mac und Windows verfügbar.

Verwendungs- und Ausgabebeispiel:

$ cloc --exclude-lang=DTD,Lua,make,Python .
    2570 text files.
    2200 unique files.
    8654 files ignored.

http://cloc.sourceforge.net v 1.53  T=8.0 s (202.4 files/s, 99198.6 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
JavaScript                    1506          77848         212000         366495
CSS                             56           9671          20147          87695
HTML                            51           1409            151           7480
XML                              6           3088           1383           6222
-------------------------------------------------------------------------------
SUM:                          1619          92016         233681         467892
-------------------------------------------------------------------------------

18 Stimmen

Das ist ein schönes Tool, das schön schnell läuft und am Ende nützliche Statistiken liefert. Ich liebe es.

4 Stimmen

Beachten Sie, dass Sie Unix-Befehle unter Windows mit cygwin (oder anderen ähnlichen Ports/Umgebungen) ausführen können. Für mich ist diese Art des Zugriffs so extrem nützlich, dass sie eine Notwendigkeit ist. Eine Unix-Befehlszeile ist magisch. Ich mag besonders Perl und reguläre Ausdrücke.

0 Stimmen

CLOC und SLOCCount funktionieren auf dem Mid 2015 Macbook problemlos. Beachten Sie ihre Zahlen sind nahe, aber nicht genau das gleiche für 127k Java Android-Projekt. Beachten Sie auch die iOS-Äquivalent hatte 2x die LoC; so, die "Kosten" Metrik in SLOCCount könnte aus sein (oder vielleicht iOS-Entwickler machen 2x, was Android-Entwickler machen. :-)

567voto

Shizzmo Punkte 15411

Für einen weiteren Einzeiler:

( find ./ -name '*.php' -print0 | xargs -0 cat ) | wc -l

Es funktioniert bei Namen mit Leerzeichen und gibt nur eine Zahl aus.

1 Stimmen

+1 Dito...habe ewig gesucht...alle anderen "find"-Befehle gaben nur die Anzahl der tatsächlichen Dateien zurück....der -print0-Befehl hier hat mir die tatsächliche Zeilenzahl geliefert!!! danke!

2 Stimmen

Die beste Lösung, die ich gefunden habe. Ich habe den Pfad und den Dateityp parametrisiert und diesen Code zu einem Skript in meinem Pfad hinzugefügt. Ich plane, ihn häufig zu verwenden.

0 Stimmen

Warum wird Ihnen gedankt für print0 ? Was soll das bedeuten?

457voto

Michael Wild Punkte 23411

Wenn Sie eine halbwegs aktuelle Version der Bash (oder ZSH) verwenden, ist es viel einfacher:

wc -l **/*.php

In der Bash-Shell erfordert dies den Befehl globstar gesetzt werden, andernfalls wird die Option ** glob-operator ist nicht rekursiv. Um diese Einstellung zu aktivieren, geben Sie

shopt -s globstar

Um dies dauerhaft zu machen, fügen Sie es zu einer der Initialisierungsdateien ( ~/.bashrc , ~/.bash_profile usw.).

11 Stimmen

Ich stimme der Einfachheit halber dafür, möchte aber darauf hinweisen, dass die Verzeichnisse offenbar nicht rekursiv durchsucht werden, sondern nur die Unterverzeichnisse des aktuellen Verzeichnisses. Dies ist auf SL6.3.

10 Stimmen

Das hängt von Ihrer Shell und den Optionen ab, die Sie eingestellt haben. Die Bash erfordert globstar eingestellt werden damit dies funktioniert.

0 Stimmen

@MichaelWild, und was ist, wenn ich mehr Codezeilen benötige, als dies verarbeiten kann? Es wird ein sehr niedriger Wert für den Linux-Kernel zurückgegeben...

117voto

Calmarius Punkte 17229

Auf Unix-ähnlichen Systemen gibt es ein Werkzeug namens cloc die Code-Statistiken liefert.

Ich habe ein zufälliges Verzeichnis in unserer Codebasis durchsucht, in dem es heißt:

      59 text files.
      56 unique files.
       5 files ignored.

http://cloc.sourceforge.net v 1.53  T=0.5 s (108.0 files/s, 50180.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                               36           3060           1431          16359
C/C++ Header                    16            689            393           3032
make                             1             17              9             54
Teamcenter def                   1             10              0             36
-------------------------------------------------------------------------------
SUM:                            54           3776           1833          19481
-------------------------------------------------------------------------------

2 Stimmen

@moose technisch simtao erwähnt es speziell als eine Lösung für Windows-Benutzer, nicht erwähnt linux oder unix überhaupt.

5 Stimmen

@Elch Tabelle wurde in seiner Antwort viel später als meine Antwort bearbeitet, jetzt sehen die beiden tatsächlich ähnlich aus.

0 Stimmen

Ich mag es. cloc ist wirklich toll. Aber was bedeutet dieser Name?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X