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

Vinayak Bagaria Punkte 142

Wenn Sie die von Ihnen geschriebenen LOCs zählen wollen, müssen Sie eventuell einige Dateien ausschließen.

Für eine Django Projekt, können Sie die Option migrations y static Mappen. Bei einem JavaScript-Projekt können Sie alle Bilder oder alle Schriftarten ausschließen.

find . \( -path '*/migrations' -o -path '*/.git' -o -path '*/.vscode' -o -path '*/fonts' -o -path '*.png' -o -path '*.jpg' -o -path '*/.github' -o -path '*/static' \) -prune -o -type f -exec cat {} + | wc -l

Die Verwendung ist hier wie folgt:

*/Ordner_name
*/.file_extension

Um die Dateien aufzulisten, ändern Sie den letzten Teil des Befehls:

find . \( -path '*/migrations' -o -path '*/.git' -o -path '*/.vscode' -o -path '*/fonts' -o -path '*.png' -o -path '*.jpg' -o -path '*/.github' -o -path '*/static' \) -prune -o --print

2voto

Yunus Eş Punkte 91

Versuchen Sie dies unter Windows PowerShell:

dir -Recurse *.php | Get-Content | Measure-Object -Line

2voto

Luca Davanzo Punkte 19769

Ich habe dieses Inline-Skript verwendet, das ich aus dem Verzeichnis eines Quellprojekts starte:

 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

Das Ergebnis ist diese Ausgabe:

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.

2voto

Moshe Rabaev Punkte 1733

Ich mache das so:

Hier ist die lineCount.c Implementierung der Datei:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int getLinesFromFile(const char*);

int main(int argc, char* argv[]) {
   int total_lines = 0;
   for(int i = 1; i < argc; ++i) {
       total_lines += getLinesFromFile(argv[i]); // *argv is a char*
   }

   printf("You have a total of %d lines in all your file(s)\n",    total_lines);
   return 0;
}

int getLinesFromFile(const char* file_name) {
    int lines = 0;
    FILE* file;
    file = fopen(file_name, "r");
    char c = ' ';
    while((c = getc(file)) != EOF)
        if(c == '\n')
            ++lines;
    fclose(file);
    return lines;
}

Öffnen Sie nun die Befehlszeile und geben Sie gcc lineCount.c . Dann tippen Sie ./a.out *.txt .

Dies zeigt die Gesamtanzahl der Zeilen der Dateien mit der Endung .txt in Ihrem Verzeichnis an.

2voto

venky513 Punkte 321

Wechseln Sie zunächst in das Verzeichnis, in dem Sie die Anzahl der Zeilen wissen wollen.

Wenn ich zum Beispiel die Anzahl der Zeilen in allen Dateien eines Verzeichnisses namens Muster geben $cd sample .

Versuchen Sie dann den Befehl $wc -l * . Dies gibt die Anzahl der Zeilen für jede Datei und am Ende auch die Gesamtzahl der Zeilen im gesamten Verzeichnis zurück.

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