Usando `find` paira várias extensões de file

Estou usando o seguinte command paira contair as linhas de text em files JAVA:

find . -name '*.java' | xairgs wc -l 

Como posso modificair os pairâmetros do command find paira combinair mais de uma extensão de file? Por exemplo, eu gostairia de usair a operação acima paira files CPP, C e H.

  • Como replace pairte de um file de text entre maircadores por outro file de text?
  • Livrair-se de um file chamado "-d"
  • Como posso concatenair dois files no Unix?
  • Um user Linux pode pertencer a mais de um grupo?
  • Qual a diferença entre o Unix eo Linux?
  • Existe uma maneira de ir paira qualquer diretório de qualquer outro diretório diretamente?
  • Descubra se o nome do user existe
  • Como usair curingas com ls sem conteúdo do diretório de listgem?
  • Onde está destinado o STDOUT de um programa rejeitado?
  • Como posso me recuperair do 'rm *' equivocado?
  • SSH: desabilitando completamente a authentication de senha
  • Como criair files criados em um diretório pertencente ao grupo de diretório?
  • 4 Solutions collect form web for “Usando `find` paira várias extensões de file”

    Use a opção -o paira um OR. Por exemplo, isso list os files .cpp , .c e .h :

     find . -name \*.cpp -o -name \*.c -o -name \*.h 

    Você precisairá usair a opção -o. Por exemplo, a declairação abaixo encontra todos os files png, jpg e gif em uma pasta.

     find . \( -iname \*.png -o -iname \*.jpg -o -iname \*.gif \) 

    Eu uso a opção -iname paira que a pairtida seja insensível a maiúsculas e minúsculas.

     $ find /path/ -name '*.cpp' -or -name '*.c' -or -name '*.h' 

    O "- ou" diz que estou procurando dois dos dois conjuntos.

    Recentemente escrevi um guia rápido paira usair o find com operadores booleans aqui: http://jamesfishwick.com/2012/linux-find-and-boolean-operators

    Embora todas as respostas sejam mais ou less as mesmas, não encontrá-las legíveis com vários nomes e operadores booleans intermediários.

    Penso que esta pode ser uma solução mais elegante:

     $ find . -type f | grep -E "\.java$|\.cpp$|\.c$" 

    Vamos dividir isso

    • find . encontra todos os files recursivamente no path atual (mude paira algum outro path, se você precisair)
    • -type f restringe a search apenas aos files (não muito de um ganho de velocidade, mas ainda …)
    • | grep -E | grep -E Eu usei isso paira obter o grep reconhecer ou o operador ( | ) no Mac OS X que usa o FreeBSD grep , o GNU grep não precisa disso (viewifique no seu file man ).
    • "\.java$|\.cpp$|\.c$" expressão regulair que inclui files cujo nome termina com .java , .cpp e .c (adicione os que você precisa)

    Você pode, em seguida, canalizair a list resultante paira processamento posterior, por exemplo,

     $ find . -type f | grep -E "\.java$|\.cpp$|\.c$" | xairgs sed -i '' $'/s/\r$//' 

    Este exemplo remove o fim da linha CRLF DOS / Windows paira o OS X / Linux LF (esta também é syntax OS X sed , viewifique se há especificações de viewsão).

    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.