Ich weiß, dass, um alle h-Dateien zu finden, die ich brauche: finden. -name "* .h" aber wie finden Sie alle h AND CPP-Dateien?Wie verwende ich den Unix-Befehl "find", um alle cpp- und h-Dateien zu finden?
Antwort
find . -name \*.h -print -o -name \*.cpp -print
oder
find . \(-name \*.h -o -name \*.cpp \) -print
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
Versuchen Sie 'finden. -name \ *. h -print -o -name \ *. cpp -print' –
Das funktioniert. Vielen Dank. – Nate
find -name "*.h" -or -name "*.cpp"
(bearbeitet die Sterne zu schützen, die als Formatierung interpretiert wurden)
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.)
find . -regex ".*\.[cChH]\(pp\)?" -print
für mich Dieses getestet fein in Cygwin.
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. –
@Lyle, dein Befehl funktioniert nicht auf Linux :( – hugemeow
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).
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.
Mögliches Duplikat von [Unix finden: mehrere Dateitypen] (https://stackoverflow.com/questions/7190565/unix-find-multiple-file-types) –