recursive files unix find

files - cómo usar el comando "buscar" de unix para encontrar todos los archivos cpp y h?



unix find text in files (6)

find -name "*.h" -or -name "*.cpp"

(editado para proteger los asteriscos que fueron interpretados como formateo)

Lo sé para encontrar todos los archivos h que necesito usar: buscar. -name "* .h" pero ¿cómo encontrar todos los archivos h AND cpp?


find . -regex ".*/.[cChH]/(pp/)?" -print

Esto probó bien para mí en cygwin.


Puede usar find en esta breve forma:

find /( -name ''*.cpp'' -o -name ''*.h'' /) -print

-print puede ser omitido. Usar -o solo entre expresiones es especialmente útil cuando quiere encontrar múltiples tipos de archivos y hacer un mismo trabajo (digamos calculando md5sum).


Una manera breve y clara de hacerlo con find es:

find . -regex ''.*/./(cpp/|h/)''

Desde la página man para -regex : "Esta es una coincidencia en todo el camino, no en una búsqueda". De ahí la necesidad de prefijar con .* Para ./dir1/dir2/... el comienzo de la ruta ./dir1/dir2/... antes del nombre del archivo.


find . -name /*.h -print -o -name /*.cpp -print

o

find . /( -name /*.h -o -name /*.cpp /) -print


Paul Tomblin ya me ha dado una excelente respuesta, pero pensé que vi un patrón en lo que estabas haciendo.

Lo más probable es que uses find para generar una lista de archivos para procesar con grep un 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 recursiva de todos los archivos relacionados con C ++ en un directorio para una cadena dada es tan simple como

ack "int/s+foo" --cpp

"--cpp" coincide de forma predeterminada con los .cpp .cc .cxx .m .hpp .hh .h .hxx

(También omite los directorios de repositorio de forma predeterminada, por lo que no coincidirá en los archivos que parezcan archivos en ellos).