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 find
pará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.
find
comando, ya que es donde está buscando archivos coincidentes.find -print0 | xargs -0
constructo 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
-o
opción para un OR. Por ejemplo, esto podría enumerar.cpp
,.c
y.h
archivos: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 f
limita la búsqueda solo a archivos (no es un aumento de velocidad demasiado, pero aún así ...)| grep -E
He utilizado esto para conseguir grep reconocer o (|
) operador de Mac OS X que utiliza FreeBSD grep , GNU grep no necesita que (cheque en suman
archivo)."\.java$|\.cpp$|\.c$"
expresión regular que incluye archivos cuyos extremos nombre con.java
,.cpp
y.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
CRLF
que finaliza para OS X / LinuxLF
(esta también es lased
sintaxis de OS X , verifique los detalles de su versión).fuente