Use a opção -o
para um OR. Por exemplo, isso listaria os arquivos .cpp
, .c
e .h
:
find . -name \*.cpp -o -name \*.c -o -name \*.h
Estou usando o seguinte comando para contar as linhas de texto em arquivos JAVA:
find . -name '*.java' | xargs wc -l
Como posso modificar os parâmetros do comando find
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.
Você precisará usar a opção -o. Por exemplo, a declaração abaixo encontra todos os arquivos png, jpg e gif em uma pasta.
find . \( -iname \*.png -o -iname \*.jpg -o -iname \*.gif \)
Eu uso a opção -iname para que a correspondência não seja sensível a maiúsculas e minúsculas.
$ find /path/ -name '*.cpp' -or -name '*.c' -or -name '*.h'
O "-or" diz que estou procurando um dos dois conjuntos.
Recentemente, escrevi um guia rápido sobre como usar o find com operadoras booleanas aqui: link
Embora todas as respostas sejam mais ou menos as mesmas, não as acho legíveis com vários nomes e operadores booleanos intermediários.
Acho que isso pode ser uma solução mais elegante:
$ find . -type f | grep -E "\.java$|\.cpp$|\.c$"
Vamos dividir isso
find .
encontra todos os arquivos recursivamente no caminho atual (mude para algum outro caminho se você precisar) -type f
restringe a pesquisa apenas a arquivos (não muito de ganho de velocidade, mas ainda assim ...) | grep -E
usei isto para obter o operador grep reconhecer ou ( |
) no Mac OS X que usa o FreeBSD grep , o GNU grep não precisa disso (verifique no seu arquivo man
). "\.java$|\.cpp$|\.c$"
expressão regular que inclui arquivos cujo nome termina com .java
, .cpp
e .c
(adicione os que você precisa) Você pode enviar a lista resultante para processamento adicional, por exemplo,
$ find . -type f | grep -E "\.java$|\.cpp$|\.c$" | xargs sed -i '' $'/s/\r$//'
Este exemplo remove a linha DOS / Windows CRLF
que termina com OS X / Linux LF
(também é a sintaxe do OS X sed
, verifique as especificações da versão).