find comando com quantificador regex, por ex. {1,2}

10

Eu tenho tentado criar uma string de comando de busca que encontrará todos os arquivos que terminam com um número 1-99, mas excluem todos os outros.

por exemplo. Eu quero encontrar myfile1 myfile99 mas não myfile456 e não myfilebackup

O regex em que estou pensando é myfile[1-9]{1,2} , mas não consigo fazer isso funcionar com o find.

find . -regex '.*myfile[0-9]{1,2}' OU find . -iname 'myfile[0-9]{1,2}'

Pelo que vejo, é a parte {1,2} que não está funcionando.

(a propósito você pode usar -name -regex intercambiavelmente?)

Qualquer ajuda apreciada.

    
por Lukas88 07.03.2013 / 14:21

2 respostas

9

Você poderia tentar

find . -regex '.*myfile[0-9][0-9]?'

ou

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)
    
por 07.03.2013 / 14:32
11

Se você tiver o GNU find, poderá usar outro tipo de expressão regular:

find . -regextype sed -regex '.*myfile[0-9]\{1,2\}'

De acordo com o GNU, find usa um neutralizado sintaxe de expressão regular do Emacs por padrão - o Emacs suporta a sintaxe \{from,to\} , mas pelo menos o GNU find não apoiá-lo.

Estranhamente, o manual de referência não inclui uma seção sobre a sintaxe da expressão regular sed , portanto, quem sabe quais partes são suportadas.

    
por 07.03.2013 / 14:39