¿Cómo utilizar el comando "encontrar" de Unix para encontrar todos los archivos cpp y h?

StackOverflow https://stackoverflow.com/questions/277999

  •  07-07-2019
  •  | 
  •  

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?

¿Fue útil?

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top