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?

5voto

voilalex Punkte 1144

Sie können ein Dienstprogramm namens codel ( Link ). Es ist ein einfaches Python-Modul zum Zählen von Zeilen mit bunter Formatierung.

Einrichtung

pip install codel

Verwendung

Um Zeilen von C++-Dateien zu zählen (mit .cpp y .h Erweiterungen), verwenden:

codel count -e .cpp .h

Sie können auch einige Dateien/Ordner mit dem Format .gitignore ignorieren:

codel count -e .py -i tests/**

Es ignoriert alle Dateien im Verzeichnis tests/ carpeta.

Die Ausgabe sieht wie folgt aus:

Long output

Sie können die Ausgabe auch mit der Option -s Flagge. Es blendet die Informationen über die einzelnen Dateien aus und zeigt nur Informationen über die einzelnen Erweiterungen an. Das Beispiel ist unten:

Short output

0 Stimmen

Gibt es eine Möglichkeit, dies für alle Textdateien zu tun, nicht nur für bestimmte Erweiterungen?

0 Stimmen

@AaronFranke Inzwischen gibt es keine Möglichkeit mehr.

5voto

walv Punkte 2443

Für Windows ist ein einfaches und schnelles Werkzeug LocMetrics .

0 Stimmen

Es ist ziemlich unwahrscheinlich, dass OP unter Windows arbeitet, wenn er die Bash verwendet.

1 Stimmen

@VanessaMcHale Sowohl der Titel der Frage als auch die Beschreibung verlangen nicht eindeutig nach einer reinen Unix-Lösung. Eine Windows-basierte Lösung ist also akzeptabel. Auch Google hat mich auf diese Seite verwiesen, als ich nach einer ähnlichen Lösung suchte.

0 Stimmen

Dieser Kommentar hat mir geholfen. Ich habe das ausprobiert und es funktioniert gut.

4voto

nav Punkte 1566

Etwas anderes:

wc -l `tree -if --noreport | grep -e'\.php$'`

Das funktioniert gut, aber Sie brauchen mindestens eine *.php Datei im aktuellen Ordner oder einem seiner Unterordner, oder aber wc Stände.

0 Stimmen

Kann auch ARG_MAX überlaufen

4voto

Paul Pettengill Punkte 4783

Wenn Sie die Ergebnisse nach der Anzahl der Zeilen sortiert haben möchten, können Sie einfach Folgendes hinzufügen | sort o | sort -r ( -r für absteigende Reihenfolge) auf die erste Antwort, etwa so:

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

1 Stimmen

Da die Ausgabe von xargs wc -l numerisch ist, müsste man eigentlich sort -n ou sort -nr .

4voto

HappyFace Punkte 2400

Es ist sehr einfach mit Z-Muschel (zsh) Globs:

wc -l ./**/*.php

Wenn Sie Bash verwenden, müssen Sie nur ein Upgrade durchführen. Es gibt absolut keinen Grund, Bash zu verwenden.

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