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?

2voto

Leerzeilen ausgenommen:

find . -name "*.php" | xargs grep -v -c '^$' | awk 'BEGIN {FS=":"} { $cnt = $cnt + $2} END {print $cnt}'

Einschließlich Leerzeilen:

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

2voto

sree Punkte 1201
$cd directory
$wc -l* | sort -nr

1voto

AJed Punkte 568

Ein weiterer Befehl, um die Summe aller Dateien zu ermitteln (natürlich unter Linux)

find ./ -type f -exec wc -l {}  \; | cut -d' ' -f1 | paste -sd+ | bc

Hauptunterschied zu anderen Antworten:

  1. mit find -exec ,
  2. mit Einfügen (mit Ausschneiden) ,
  3. mit bc

0 Stimmen

Ich habe dies ein wenig in meiner eigenen Antwort geändert, damit es unter OS X funktioniert, aber sollte diese Version nicht auch ein "-" als letztes Argument für paste haben, damit es die Eingabe von stdin übernimmt? Oder macht paste das standardmäßig unter Linux?

0 Stimmen

Das ist standardmäßig der Fall. Sorry, ich habe nicht gesehen, dass es nur für OS X ist.

0 Stimmen

Die Frage war allgemein, so dass Ihre Antwort war großartig für Linux (und auch ich mochte es genug, um meine OS X-Variante zu modellieren!), fragte sich nur, wenn Paste war wirklich ein bisschen anders auf Linux oder wenn das war ein Tippfehler zu beheben.

1voto

shyam Punkte 21

Ich habe BusyBox auf meinem Windows-System installiert. Ich habe also Folgendes getan.

ECHO OFF
for /r %%G in (*.php) do (
busybox grep . "%%G" | busybox wc -l
)

0voto

Ich kann auch einen weiteren OS X-Eintrag hinzufügen, diesmal mit dem einfachen alten finden. con exec (was ich der Verwendung von xargs da ich merkwürdige Ergebnisse bei sehr großen find Ergebnismengen mit xargs in der Vergangenheit).

Da dies für OS X ist, habe ich auch die Filterung in die .h- oder .m-Dateien eingefügt - stellen Sie sicher, dass Sie den ganzen Weg bis zum Ende kopieren!

find ./ -type f -name "*.[mh]" -exec wc -l {}  \; | sed -e 's/[ ]*//g' | cut -d"." -f1 | paste -sd+ - | bc

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