Wie kann man alle Codezeilen in einem Verzeichnis rekursiv lesen?

Wir haben eine PHP-Anwendung und möchten alle Codezeilen unter einem bestimmten Verzeichnis und dessen Unterverzeichnissen zählen. Wir müssen Kommentare nicht ignorieren, da wir nur versuchen, eine ungefähre Vorstellung zu bekommen.

 wc -l *.php 

Dieser Befehl funktioniert gut innerhalb des angegebenen Verzeichnisses, ignoriert jedoch Unterverzeichnisse. Ich dachte, es könnte funktionieren, aber es gibt 74 zurück, was definitiv nicht der Fall ist ...

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

Was ist die korrekte Syntax für die Ablage in allen Dateien?

1376
31 авг. set user77413 am 31. August 2009-08-31 20:42 09 um 20:42 2009-08-31 20:42
@ 42 Antworten
  • 1
  • 2

Versuch:

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

Das SLOCCount-Tool kann auch helfen.

Dies gibt genaue Quellcodezeilen für jede Hierarchie, auf die Sie es zeigen, sowie einige zusätzliche Parameter.

2320
31 авг. Antwort von Peter Elespuru 31 Aug. 2009-08-31 20:50 09 um 20:50 2009-08-31 20:50

Für die andere einzelne Zeile:

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

arbeitet mit Namen mit Leerzeichen, zeigt nur eine Zahl an.

419
31 авг. die antwort wird von shizzmo 31 aug gegeben. 2009-08-31 23:26 09 um 23:26 Uhr 2009-08-31 23:26 Uhr

Wenn Sie immer noch die neueste Version von Bash (oder ZSH) verwenden, ist dies wesentlich einfacher:

 wc -l ***.php 

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

4
26 окт. Die Antwort wird HappyFace am 26. Oktober gegeben. 2018-10-26 18:23 18 um 18:23 Uhr 2018-10-26 18:23 Uhr

Wenn Sie möchten, dass Ihre Ergebnisse nach der Anzahl der Zeilen sortiert werden, können Sie einfach | sort hinzufügen | sort oder | sort -r | sort -r ( -r für absteigende Reihenfolge) zur ersten Antwort, zum Beispiel:

 find . -name '*.php' | xargs wc -l | sort -r 
4
14 дек. Antwort von Paul Pettengill 14. Dezember 2012-12-14 22:14 '12 um 22:14 Uhr 2012-12-14 22:14

Etwas anderes:

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

Dies funktioniert gut, aber im aktuellen Ordner oder einem seiner Unterordner müssen Sie mindestens eine *.php Datei haben, andernfalls wird wc *.php

4
02 февр. Die Antwort wird gegeben nav 02 Feb. 2013-02-02 17:56 '13 um 17:56 2013-02-02 17:56

Wenn Sie nur die Gesamtzahl der Zeilen benötigen, lassen Sie Ihre PHP-Dateien sprechen, und Sie können einen sehr einfachen einzeiligen Befehl auch unter Windows verwenden, wenn Sie GnuWin32 installiert haben. So:

 cat `/gnuwin32/bin/find.exe . -name *.php` | wc -l 

Sie müssen genau angeben, wo sich find.exe befindet, ansonsten Windows, auf dem FIND.EXE (von alten DOS-ähnlichen Befehlen) ausgeführt wird, da dies in der PATH-Umgebung wahrscheinlich GnuWin32 unterliegt und unterschiedliche Parameter und Ergebnisse aufweist.

Beachten Sie, dass Sie im obigen Befehl nur Anführungszeichen verwenden sollten, keine einfachen Anführungszeichen.

3
10 февр. Die Antwort gibt Neven Boyanov am 10. Februar. 2011-02-10 13:14 '11 um 13:14 Uhr 2011-02-10 13:14

Für Windows ist LocMetrics das schnelle und einfache Tool.

3
14 янв. Die Antwort wird am 14. Januar gegeben 2015-01-14 23:58 '15 um 23:58 Uhr 2015-01-14 23:58

Ausgabe der längsten Dateien (d. H., Vielleicht benötigen diese >

  find . -name '*.php' | xargs wc -l | sort -nr | egrep -v "libs|tmp|tests|vendor" | less 
3
08 июля '13 в 6:21 2013-07-08 06:21 Die Antwort gibt Matt am 08. Juli '13 um 6:21 2013-07-08 06:21

Ich mag zwar die Skripte, die ich am liebsten mag, da es auch eine Zusammenfassung für jede Datei zeigt, wenn der General

 wc -l `find . -name "*.php"` 
2
08 окт. die antwort ist akiva 08 oct. 2014-10-08 08:01 14 um 08:01 Uhr 2014-10-08 08:01

Leere Zeilenausnahme

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

Leerzeilen inklusive:

 find . -name "*.php" | xargs wc -l 
2
02 апр. Die Antwort wird von Vladimir Venediktov 02 Apr. gegeben. 2015-04-02 00:43 '15 um 0:43 2015-04-02 00:43

Wenn Sie es einfach halten möchten, schneiden Sie den Broker ab und rufen Sie wc mit allen Dateinamen auf:

 wc -l `find . -name "*.php"` 

Oder in moderner Syntax:

 wc -l $(find . -name "*.php") 

Funktioniert, so>

2
08 июня '16 в 23:56 2016-06-08 23:56 Die Antwort wird von alexis am 08. Juni '16 um 23:56 2016-06-08 23:56 gegeben

Sie brauchen nicht all diese komplexen und schwer zu merkenden Befehle. Sie brauchen nur ein Werkzeug namens Zeilenzähler .

Schnelle Überprüfung

So erhalten Sie das Tool.

 $ pip install line-counter 

Verwenden Sie den line , um die Anzahl der Dateien und die Anzahl der Zeilen im aktuellen Verzeichnis (rekursiv) abzurufen.

 $ line Search in /Users/Morgan/Documents/Example/ file count: 4 line count: 839 

Wenn Sie mehr Details wünschen, verwenden Sie einfach die line -d .

 $ line -d Search in /Users/Morgan/Documents/Example/ Dir A/file Cc 72 Dir A/file D.py 268 file A.py 467 file Bc 32 file count: 4 line count: 839 

Und das Beste an diesem Tool ist, dass Sie .gitignore als Konfigurationsdatei hinzufügen können. Sie können Regeln einrichten, um auszuwählen oder zu ignorieren, welche Dateien auf dieselbe Weise gelesen werden sollen wie in '.gitignore'.

Weitere Beschreibung und Verwendung hier: https://github.com/MorganZhang100/line-counter

2
11 авг. Die Antwort wird von Morgan Zhang 11 Aug gegeben. 2016-08-11 02:39 '16 am 2:39 2016-08-11 02:39

Ich habe dieses Inline-Skript verwendet, das ich im src-project-Verzeichnis ausführte:

  for i in $(find . -type f); do rowline=$(wc -l $i | cut -f1 -d" "); file=$(wc -l $i | cut -f2 -d" "); lines=$((lines + rowline)); echo "Lines["$lines"] " $file "has "$rowline"rows."; done  unset lines 

Dies führt zu dieser Schlussfolgerung:

 Lines[75] ./Db.h has 75rows. Lines[143] ./Db.cpp has 68rows. Lines[170] ./main.cpp has 27rows. Lines[294] ./Sqlite.cpp has 124rows. Lines[349] ./Sqlite.h has 55rows. Lines[445] ./Table.cpp has 96rows. Lines[480] ./DbError.cpp has 35rows. Lines[521] ./DbError.h has 41rows. Lines[627] ./QueryResult.cpp has 106rows. Lines[717] ./QueryResult.h has 90rows. Lines[828] ./Table.h has 111rows. 
2
24 сент. Die Antwort gibt Luca Davanzo am 24. September . 2014-09-24 18:01 '14 um 18:01 2014-09-24 18:01

In OS X geben mindestens die Befehle find + xarg + wc, die in einigen anderen Antworten aufgeführt sind, in großen Listen mehrmals "total" ein, und es sind keine vollständigen Informationen vorhanden. Ich konnte mit dem folgenden Befehl eine Gesamtzahl von .c-Dateien erhalten:

find . -name '*.c' -print0 |xargs -0 wc -l|grep -v total|awk '{ sum += $1; } END { print "SUM: " sum; }'

2
09 сент. Antwort von Doug Richardson September 09 2014-09-09 21:29 14 um 21:29 2014-09-09 21:29
  • 1
  • 2

Weitere Fragen zu Tags oder Fragen stellen