comment utiliser le système unix & # 8220; find & # 8221; commande pour trouver tous les fichiers cpp et h?
Question
Je sais que pour trouver tous les fichiers h dont j'ai besoin: trouver . -name " *. h " mais comment trouver tous les fichiers h AND cpp?
La solution
find . -name \*.h -print -o -name \*.cpp -print
ou
find . \( -name \*.h -o -name \*.cpp \) -print
Autres conseils
find -name "*.h" -or -name "*.cpp"
(modifié pour protéger les astérisques qui ont été interprétés comme un formatage)
Paul Tomblin a déjà fourni une excellente réponse, mais je pensais avoir constaté une tendance dans ce que vous faisiez.
Il est probable que vous utilisiez find pour générer une liste de fichiers à traiter avec grep un jour. Pour cette tâche, il existe un outil beaucoup plus convivial, Ack
Fonctionne sur tout système prenant en charge perl, et la recherche de tous les fichiers C ++ associés dans un répertoire de manière récursive pour une chaîne donnée est aussi simple que
.ack "int\s+foo" --cpp
"- cpp"
correspond par défaut à .cpp .cc .cxx .m .hpp .hh .h .hxx
fichiers
(Il ignore également les répertoires du référentiel par défaut, il ne correspond donc pas aux fichiers qui ressemblent à des fichiers.)
Une méthode simple et claire pour le faire avec find
est la suivante:
find . -regex '.*\.\(cpp\|h\)'
À partir de la page de manuel de -regex
: "Il s'agit d'une correspondance sur le chemin d'accès complet, pas d'une recherche." D’où la nécessité de préfixer . *
pour faire correspondre le début du chemin ./ dir1 / dir2 /...
avant le nom du fichier.
find . -regex ".*\.[cChH]\(pp\)?" -print
Cela a bien fonctionné pour moi dans cygwin.
Vous pouvez utiliser find
dans cette forme abrégée:
find \( -name '*.cpp' -o -name '*.h' \) -print
-print
peut être omis. Utiliser -o
juste entre les expressions est particulièrement utile lorsque vous souhaitez rechercher plusieurs types de fichiers et effectuer le même travail (calculons md5sum).