Ich verwende den folgenden Befehl zum Zählen der Textzeilen in JAVA-Dateien:
find . -name '*.java' | xargs wc -l
Wie kann ich die find
Befehlsparameter so ändern , dass sie mehreren Dateierweiterungen entsprechen? Zum Beispiel möchte ich die obige Operation für CPP-, C- und H-Dateien verwenden.
find
Befehl, da Sie dort nach übereinstimmenden Dateien suchen.find -print0 | xargs -0
Konstrukt oder noch besser und einfacher:find . -name '*.cpp' -o -name '*.c' -o -name '*.h' -exec wc -l {} +
. Dies vermeidet Dateinamenprobleme (Leerzeichen, neue Zeilen usw.) und ist eine (sehr) gute Gewohnheit.Antworten:
Verwenden Sie die
-o
Option für einen OP. Zum Beispiel würde diese Liste.cpp
,.c
und.h
Dateien:quelle
*
nicht mehr maskiert werden, wenn es als Code formatiert ist. Total übersehen. :)Sie müssen die Option -o verwenden. Die folgende Anweisung findet beispielsweise alle PNG-, JPG- und GIF-Dateien in einem Ordner.
Ich verwende die Option -iname, damit bei der Übereinstimmung die Groß- und Kleinschreibung nicht berücksichtigt wird.
quelle
Das "-oder" sagt, dass ich nach einem / beiden von zwei Sätzen suche.
Ich habe kürzlich eine Kurzanleitung zur Verwendung von find mit booleschen Operatoren hier geschrieben: http://jamesfishwick.com/2012/linux-find-and-boolean-operators
quelle
Obwohl alle Antworten mehr oder weniger gleich sind, finde ich sie nicht lesbar mit mehreren Namen und Booleschen Operatoren dazwischen.
Ich denke, das könnte eine elegantere Lösung sein:
Lassen Sie uns das auflösen
find .
findet alle Dateien rekursiv im aktuellen Pfad (ändern Sie den Pfad, falls erforderlich)-type f
Schränkt die Suche nur auf Dateien ein (kein allzu großer Geschwindigkeitsgewinn, aber dennoch ...)| grep -E
Ich dies zu gewöhnen grep zu erkennen oder (|
) Operator in Mac OS X , die FreeBSD verwendet grep , GNU grep nicht braucht , dass (Check - in Ihreman
Datei)."\.java$|\.cpp$|\.c$"
regulärer Ausdruck , die Dateien enthält , deren Namen Ende mit.java
,.cpp
und.c
(Add , die Sie brauchen)Sie können dann die resultierende Liste zur weiteren Verarbeitung weiterleiten, z
In diesem Beispiel wird die DOS / Windows-
CRLF
Zeilenende für OS X / Linux entferntLF
(dies ist auch die OS X-sed
Syntax; überprüfen Sie Ihre Versionsspezifikationen).quelle