Come elencare tutti i file di origine (* .c, * .cpp, * .h)


15

Vorrei trovare i file di origine (* .c, * .cpp, * .h) che contengono in Linux / MinGW / Cygwin e ricorsivamente in tutte le sottodirectory.

La mia idea di base è usare finde grep. Tuttavia, creare un'espressione regolare in grado di controllare il nome del file specificato è * .c, * .cpp o * .h non è facile. Puoi aiutarmi?

Risposte:


14

Questo dovrebbe funzionare:

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


1

Io userei:

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

1
Nel mio macbook, la sceneggiatura senza un -Enon riesce a trovare nulla. potresti aver bisogno di aggiungere un -E (come esteso) per renderlo più portatile, proprio come find -E . -regex '.*\.(c|h|cpp)' -print. ;-)
pambda

1

Veloce e sporco, ed evita i nomi delle directory:

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

2
Esistono tre problemi con questo comando: 1. Non trova i *.cppfile. 2. Troverà i *.|file. 3. Il glob si espanderà se ci sono file corrispondenti nella directory corrente. La citazione impedisce questo.
Dennis,


0

Uso un mac pro che funziona anche in bash. Ma ogni volta che scrivo nella riga di comando:

find -name

dice opzione illegale. Quindi l'ho semplificato come:

find *.c *.cpp *.h

e l'ho trovato davvero funzionante!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.