Estou usando o seguinte comando para contar as linhas de texto nos arquivos JAVA:
find . -name '*.java' | xargs wc -l
Como posso modificar os find
parâmetros de comando para corresponder a mais de uma extensão de arquivo? Por exemplo, eu gostaria de usar a operação acima para arquivos CPP, C e H.
find
comando, pois é aí que você está procurando por arquivos correspondentes.find -print0 | xargs -0
construção ou ainda melhor e mais simples:find . -name '*.cpp' -o -name '*.c' -o -name '*.h' -exec wc -l {} +
. Isso evitará problemas de nome de arquivo (espaços em branco, novas linhas e assim por diante) e é (muito) bom costume.Respostas:
Use a
-o
opção para um OR. Por exemplo, isso iria listar.cpp
,.c
e.h
arquivos:fonte
*
não precisa mais ser escapado se formatado como código. Totalmente esquecido disso. :)Você precisará usar a opção -o. Por exemplo, a instrução abaixo localiza todos os arquivos png, jpg e gif em uma pasta.
Eu uso a opção -iname para que a correspondência não diferencie maiúsculas de minúsculas.
fonte
O "-ou" diz que estou procurando um dos dois conjuntos.
Recentemente, escrevi um guia rápido para usar o find com operadores booleanos aqui: http://jamesfishwick.com/2012/linux-find-and-boolean-operators
fonte
Embora todas as respostas sejam mais ou menos as mesmas, não as acho legíveis com vários nomes e operadores booleanos no meio.
Eu acho que isso pode ser uma solução mais elegante:
Vamos acabar com isso
find .
localiza todos os arquivos recursivamente no caminho atual (mude para outro caminho, se necessário)-type f
restringe a pesquisa apenas a arquivos (não muito ganho de velocidade, mas ainda assim ...)| grep -E
Eu usei isso para obter grep reconhecer ou (|
) operador no Mac OS X, que utiliza o FreeBSD grep , GNU grep não precisa que (cheque em seuman
arquivo)."\.java$|\.cpp$|\.c$"
expressão regular que inclui arquivos cujas extremidades nome com.java
,.cpp
e.c
(os add que você precisa)Você pode canalizar a lista resultante para processamento adicional, por exemplo
Este exemplo remove a
CRLF
linha do DOS / Windows que termina no OS X / LinuxLF
(essa também é ased
sintaxe do OS X , verifique as especificações da sua versão).fonte