Comment répertorier tous les fichiers source (* .c, * .cpp, * .h)


15

Je voudrais trouver des fichiers sources (* .c, * .cpp, * .h) qui contiennent dans Linux / MinGW / Cygwin, et récursivement dans tous les sous-répertoires.

Mon idée de base consiste à utiliser findet grep. Cependant, la construction d'une expression régulière qui peut vérifier le nom de fichier donné est soit * .c, * .cpp ou * .h n'est pas facile. Pourrais-tu m'aider?

Réponses:


14

Cela devrait fonctionner:

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


1

J'utiliserais:

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

1
Dans mon macbook, le script sans a -Ene trouve rien. vous pourriez avoir besoin d'ajouter un -E (comme étendu) pour le rendre plus portable, tout comme find -E . -regex '.*\.(c|h|cpp)' -print. ;-)
pambda

1

Rapide et sale, et évite les noms de répertoire:

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

2
Il y a trois problèmes avec cette commande: 1. Elle ne trouvera pas de *.cppfichiers. 2. Il trouvera des *.|fichiers. 3. Le glob se développera s'il y a des fichiers correspondants dans le répertoire courant. Citer empêche cela.
Dennis

1

Vous pouvez utiliser une expression rationnelle légèrement plus simple:

find . -type f -regex ".*\.[ch]\(pp\)?$"

0

J'utilise un mac pro qui fonctionne également en bash. Mais chaque fois que je tape dans la ligne de commande:

find -name

il dit option illégale. Je l'ai donc simplement simplifié comme suit:

find *.c *.cpp *.h

et j'ai trouvé que ça fonctionnait vraiment!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.