como usar o unix “encontrar” comando para encontrar todos os arquivos cpp eh?
Pergunta
Eu sei que para encontrar todos os arquivos h eu preciso usar: encontrar . -name "* .h" mas como encontrar todos os he cpp arquivos?
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).