Jak wyświetlić listę wszystkich plików źródłowych (* .c, * .cpp, * .h)


15

Chciałbym znaleźć pliki źródłowe (* .c, * .cpp, * .h), które zawierają Linux / MinGW / Cygwin i rekurencyjnie we wszystkich podkatalogach.

Moim podstawowym pomysłem jest używanie findi grep. Jednak zbudowanie wyrażenia regularnego, które może sprawdzić podaną nazwę pliku to * .c, * .cpp lub * .h nie jest łatwe. Czy możesz mi pomóc?

Odpowiedzi:


14

To powinno działać:

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


1

Użyłbym:

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

1
Na moim Macbooku skrypt bez -Eniczego nie może znaleźć. możesz potrzebować dodać -E (jako rozszerzenie), aby uczynić go bardziej przenośnym, tak jak find -E . -regex '.*\.(c|h|cpp)' -print. ;-)
pambda

1

Szybki i brudny i pozwala uniknąć nazw katalogów:

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

2
Istnieją trzy problemy z tym poleceniem: 1. Nie znajdzie *.cppplików. 2. Znajdzie *.|pliki. 3. Glob rozszerzy się, jeśli w bieżącym katalogu znajdują się pasujące pliki. Cytowanie temu zapobiega.
Dennis


0

Używam Mac Pro, który działa również w bash. Ale za każdym razem, gdy wpisuję w wierszu polecenia:

find -name

mówi nielegalna opcja. Po prostu uprościłem to jako:

find *.c *.cpp *.h

i okazało się, że to naprawdę działało!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.