Como encontrar arquivos .h, .c e .cc no diretório atual no linux?

2
find . -name "*.[hc]|*.cc"

O acima não funciona, por quê?

UPDATE

Como faço para encontrar esses três tipos de arquivos com um único padrão?

    
por kernel 14.07.2011 / 15:51

2 respostas

5

Não funciona porque -name espera um padrão de shell. Você pode usar -regex ou simplesmente montar seu padrão da seguinte forma:

find . -name '*.c' -o -name '*.h' -o -name '*.cc'

Editar
Para fazer isso com um único padrão, você vai querer um regex:

find . -regextype posix-extended -regex '.*\.(c|h|cc)'

Você poderia fazer isso com os regexes emacs padrão, tenho certeza; Eu não os uso nem conheço as principais diferenças, então escolhi o que conheço.

Se você realmente deseja usar um único escudo, está sem sorte: a única sintaxe para várias strings é {a,b} , e isso não é suportado por find . Mas não há nada de errado com o tipo de comando de construção / encadeamento no meu primeiro exemplo. É como find deve ser usado.

    
por 14.07.2011 / 15:58
3

Se você realmente quiser usar um regex,

 find -regex "\(.*\.[hc]\|.*\.cc\)"

deve fazer o truque, mas a maneira mais normal de fazer isso é usar -o como já foi demonstrado.

    
por 14.07.2011 / 18:08