como usar o unix “encontrar” comando para encontrar todos os arquivos cpp eh?

StackOverflow https://stackoverflow.com/questions/277999

  •  07-07-2019
  •  | 
  •  

Pergunta

Eu sei que para encontrar todos os arquivos h eu preciso usar: encontrar . -name "* .h" mas como encontrar todos os he cpp arquivos?

Foi útil?

Solução

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

ou

find . \( -name \*.h -o -name \*.cpp \) -print

Outras dicas

find -name "*.h" -or -name "*.cpp"

(editado para proteger os asteriscos que foram interpretadas como formatação)

Paul Tomblin já forneceu uma resposta ótima, mas eu pensei que eu vi um padrão em que você estava fazendo.

Provavelmente, você vai estar usando find para gerar uma lista de arquivos para processo com um dia grep, e para tal tarefa existe uma ferramenta muito mais user friendly, Ack

funciona em qualquer sistema que suporta Perl, e busca através de todos C ++ arquivos relacionados em um diretório de forma recursiva para uma determinada string é tão simples como

ack "int\s+foo" --cpp 

"--cpp" por padrão corresponde arquivos .cpp .cc .cxx .m .hpp .hh .h .hxx

(Também ignora diretórios de repositório por padrão, então não vai jogo em arquivos que acontecem para olhar como arquivos neles.)

Um curto, caminho livre para fazê-lo com find é:

find . -regex '.*\.\(cpp\|h\)'

A partir da página de manual para -regex: "Este é um jogo em todo o caminho, não uma pesquisa." Daí a necessidade de prefixo com .* para coincidir com o início do ./dir1/dir2/... caminho antes o nome do arquivo.

find . -regex ".*\.[cChH]\(pp\)?" -print

Esta multa testado por mim no cygwin.

Você pode usar find este pequeno formulário:

find \( -name '*.cpp' -o -name '*.h' \) -print

-print pode ser omitida. Usando -o apenas entre expressões é especialmente útil quando você quiser encontrar vários tipos de arquivos e execute um mesmo trabalho (digamos cálculo md5sum).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top