Estoy usando el siguiente comando para contar las líneas de texto en archivos JAVA:
find . -name '*.java' | xargs wc -l
¿Cómo puedo modificar los findparámetros del comando para que coincidan con más de una extensión de archivo? Por ejemplo, me gustaría usar la operación anterior para archivos CPP, C y H.

findcomando, ya que es donde está buscando archivos coincidentes.find -print0 | xargs -0constructo o aún mejor y más simple:find . -name '*.cpp' -o -name '*.c' -o -name '*.h' -exec wc -l {} +. Esto evitará cualquier problema de nombre de archivo (espacios en blanco, nuevas líneas, etc.) y es (muy) buena costumbre.Respuestas:
Use la
-oopción para un OR. Por ejemplo, esto podría enumerar.cpp,.cy.harchivos:fuente
*necesidades ya no se escaparon si formato de código. Totalmente pasado por alto eso. :)Deberá usar la opción -o. Por ejemplo, la siguiente declaración encuentra todos los archivos png, jpg y gif en una carpeta.
Uso la opción -iname para que la coincidencia no distinga entre mayúsculas y minúsculas.
fuente
El "-o" dice que estoy buscando uno o los dos conjuntos.
Recientemente escribí una guía rápida para usar find con operadores booleanos aquí: http://jamesfishwick.com/2012/linux-find-and-boolean-operators
fuente
Si bien todas las respuestas son más o menos iguales, no las encuentro legibles con nombres múltiples y operadores booleanos intermedios.
Creo que esta puede ser una solución más elegante:
Vamos a romper esto
find .encuentra todos los archivos de forma recursiva en la ruta actual (cambie a otra ruta si es necesario)-type flimita la búsqueda solo a archivos (no es un aumento de velocidad demasiado, pero aún así ...)| grep -EHe utilizado esto para conseguir grep reconocer o (|) operador de Mac OS X que utiliza FreeBSD grep , GNU grep no necesita que (cheque en sumanarchivo)."\.java$|\.cpp$|\.c$"expresión regular que incluye archivos cuyos extremos nombre con.java,.cppy.c(los complementos que necesita)Luego puede canalizar la lista resultante para su posterior procesamiento, por ejemplo
Este ejemplo elimina la línea DOS / Windows
CRLFque finaliza para OS X / LinuxLF(esta también es lasedsintaxis de OS X , verifique los detalles de su versión).fuente