wie die Unix-zu-Befehl „find“ alle cpp und h-Dateien zu finden?
Frage
Ich weiß, dass alle h-Dateien zu finden, die ich verwenden müssen: finden . -name "* .h" aber wie alle h und CPP-Dateien zu finden?
Lösung
find . -name \*.h -print -o -name \*.cpp -print
oder
find . \( -name \*.h -o -name \*.cpp \) -print
Andere Tipps
find -name "*.h" -or -name "*.cpp"
(redigierte die Sternchen zu schützen, die als Formatierung interpretiert wurden)
Paul Tomblin Bereits hat eine tolle Antwort gegeben, aber ich dachte, dass ich in ein Muster sah, was Sie taten.
Die Chancen sind Sie finden verwenden werden eine Dateiliste zu erzeugen, mit grep einem Tag zu verarbeiten und für eine solche Aufgabe gibt es eine viel benutzerfreundliches Werkzeug, Ack
Funktioniert auf jedem System, das Perl unterstützt, und die Suche durch alle C ++ verwandten Dateien in einem Verzeichnis rekursiv für eine bestimmte Zeichenfolge ist so einfach wie
ack "int\s+foo" --cpp
"--cpp"
standardmäßig entspricht .cpp .cc .cxx .m .hpp .hh .h .hxx
Dateien
(Es springt auch Repository dirs standardmäßig so gewohnt Spiel auf Dateien, die wie Dateien in ihnen suchen passieren.)
Eine kurze, klare Art und Weise es mit find
zu tun ist:
find . -regex '.*\.\(cpp\|h\)'
Aus der Manpage für -regex
: „Dies ist ein Spiel auf dem ganzen Weg, nicht eine Suche.“ Daraus ergibt sich die Notwendigkeit, mit .*
Präfix den Anfang des Weges ./dir1/dir2/...
vor dem Dateinamen entsprechen.
find . -regex ".*\.[cChH]\(pp\)?" -print
Das ist für mich in Cygwin fein getestet.
Sie können find
in dieser kurzen Form verwenden:
find \( -name '*.cpp' -o -name '*.h' \) -print
-print
kann entfallen. Mit -o
nur zwischen Ausdrücken ist besonders nützlich, wenn Sie mehrere Arten von Dateien finden wollen und eine gleiche Arbeit (sagen wir mal md5sum Berechnung).