¿Cómo utilizar el comando "encontrar" de Unix para encontrar todos los archivos cpp y h?
Pregunta
Sé que para encontrar todos los archivos h que necesito usar: encontrar . -nombre " *. h " pero ¿cómo encontrar todos los archivos h AND cpp?
Solución
find . -name \*.h -print -o -name \*.cpp -print
o
find . \( -name \*.h -o -name \*.cpp \) -print
Otros consejos
find -name "*.h" -or -name "*.cpp"
(editado para proteger los asteriscos que se interpretaron como formateo)
Paul Tomblin ya ha proporcionado una respuesta excelente, pero pensé que vi un patrón en lo que estabas haciendo.
Es probable que use find para generar una lista de archivos para procesar con grep algún día, y para tal tarea existe una herramienta mucho más fácil de usar, Ack
Funciona en cualquier sistema que admita perl, y la búsqueda en todos los archivos relacionados con C ++ en un directorio de forma recursiva para una cadena dada es tan simple como
ack "int\s+foo" --cpp
" - cpp "
por defecto coincide con los archivos .cpp .cc .cxx .m .hpp .hh .h .hxx
(También omite los directorios del repositorio de forma predeterminada, por lo que no coincidirá con los archivos que parecen ser archivos en ellos).
Una forma breve y clara de hacerlo con find
es:
find . -regex '.*\.\(cpp\|h\)'
Desde la página del manual para -regex
: " Esta es una coincidencia en toda la ruta, no una búsqueda. " De ahí la necesidad de prefijar con . *
para que coincida con el comienzo de la ruta ./dir1/dir2 / ...
antes del nombre del archivo.
find . -regex ".*\.[cChH]\(pp\)?" -print
Esto me funcionó bien en Cygwin.
Puede usar find
en este breve formulario:
find \( -name '*.cpp' -o -name '*.h' \) -print
-print
se puede omitir. Usar -o
solo entre expresiones es especialmente útil cuando desea buscar varios tipos de archivos y hacer un mismo trabajo (digamos que calculamos md5sum).