2008-11-10 9 views

Antwort

35
find . -name \*.h -print -o -name \*.cpp -print 

oder

find . \(-name \*.h -o -name \*.cpp \) -print 
+0

Hat sich etwas geändert mit 'find' in den letzten paar Jahre? Ich kann dies weder in Ubuntu 9.10 noch in OS X 10.6 zum Laufen bringen. Es findet die '.cpp' Dateien aber nicht die' .h' Dateien. Beispiel: https://gist.github.com/783687 – Nate

+1

Versuchen Sie 'finden. -name \ *. h -print -o -name \ *. cpp -print' –

+0

Das funktioniert. Vielen Dank. – Nate

9
find -name "*.h" -or -name "*.cpp" 

(bearbeitet die Sterne zu schützen, die als Formatierung interpretiert wurden)

+0

Dies gibt nur Dateien zurück, deren Namen genau '.h' oder '.cpp' sind. Ein Platzhalter wird benötigt, um wie gewünscht zu arbeiten: find -name "* .h" -oder -name "* .cpp" – lmop

+4

'-or' ist ein GNUism. Aber "-o" ist Standard (POSIX). – Jens

6

Paul Tomblin hat bereits eine tolle Antwort gegeben, aber ich dachte, sah ich ein Muster in was du gemacht hast.

Wahrscheinlich werden Sie eine Dateiliste zu erzeugen, zu verarbeiten mit grep, eines Tages, und für eine solche Aufgabe gibt es eine viel benutzerfreundliches Werkzeug, Ack

Arbeiten auf jedem System finden werden, die mit Perl unterstützt, und die Suche durch alle C++ zugehörigen Dateien in einem Verzeichnis rekursiv für eine bestimmte Zeichenfolge ist so einfach wie

ack "int\s+foo" --cpp 

"--cpp" standardmäßig Spiele .cpp .cc .cxx .m .hpp .hh .h .hxx Dateien

(es auch springt Repository dirs standardmäßig übereinstimmen, so wird nicht auf Dateien, die wie Dateien in ihnen suchen passieren.)

2
find . -regex ".*\.[cChH]\(pp\)?" -print 

für mich Dieses getestet fein in Cygwin.

+0

Das wird auch Dateien mit der Erweiterung 'c',' Cpp', 'Hpp' finden, die entweder keine cpp-Dateien sind, noch gemeinsame Erweiterungen.Außerdem sind Sie dem letzten Punkt nicht richtig entkommen, was bedeutet, dass Sie auch mathematische Dateien namens z. 'xcpp' oder' .C'. Sie haben mehrere Probleme eingeführt, indem Sie reguläre Ausdrücke nicht beherrschen und richtig finden. –

+0

@Lyle, dein Befehl funktioniert nicht auf Linux :( – hugemeow

2

Sie können find in dieser kurzen Form verwenden:

find \(-name '*.cpp' -o -name '*.h' \) -print 

-print verzichtet werden kann. Die Verwendung von -o nur zwischen Ausdrücken ist besonders nützlich, wenn Sie mehrere Dateitypen suchen und denselben Job ausführen möchten (beispielsweise md5sum berechnen).

2

Eine kurze, klare Art und Weise es mit find zu tun ist:

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

Aus der Manpage für -regex: „Das ist ein Spiel auf dem ganzen Weg ist, nicht eine Suche.“ Daher muss .* vorangestellt werden, um den Anfang des Pfads ./dir1/dir2/... vor dem Dateinamen zu finden.