Auflisten aller Quelldateien (* .c, * .cpp, * .h)


15

Ich möchte nach Quelldateien (* .c, * .cpp, * .h) suchen, die in Linux / MinGW / Cygwin und rekursiv in allen Unterverzeichnissen enthalten sind.

Meine Grundidee ist findund grep. Es ist jedoch nicht einfach, einen regulären Ausdruck zu erstellen, der den angegebenen Dateinamen überprüft: * .c, * .cpp oder * .h. Könntest du mir helfen?

Antworten:


14

Das sollte funktionieren:

find Linux/MinGW/Cygwin -name '*.c' -o -name '*.cpp' -o -name '*.h'


1

Ich würde ... benutzen:

find . -regex '.*\.\(c\|cpp\|h\)$' -print

1
In meinem Macbook kann das Skript ohne a -Enichts finden. Möglicherweise müssen Sie ein -E (wie erweitert) hinzufügen, um es portabler zu machen, genau wie find -E . -regex '.*\.(c|h|cpp)' -print. ;-)
pambda

1

Schnell und schmutzig und vermeidet Verzeichnisnamen:

find . -type f -name *.[c\|h]

2
Es gibt drei Probleme mit diesem Befehl: 1. Es werden keine *.cppDateien gefunden. 2. Es werden *.|Dateien gefunden. 3. Der Glob wird erweitert, wenn im aktuellen Verzeichnis übereinstimmende Dateien vorhanden sind. Zitieren verhindert das.
Dennis

1

Sie können einen etwas einfacheren regulären Ausdruck verwenden:

find . -type f -regex ".*\.[ch]\(pp\)?$"

0

Ich benutze einen Mac Pro, der auch in Bash funktioniert. Aber jedes Mal, wenn ich in die Befehlszeile tippe:

find -name

es heißt illegale Option. Also habe ich es einfach so vereinfacht:

find *.c *.cpp *.h

und fand es hat wirklich funktioniert!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.