Encontre nomes de diretórios com N ocorrências de um conjunto de caracteres

0

Como combinar nomes de diretório não recursivamente que contêm N ocorrências de um subconjunto de caracteres (usando find )?

No meu caso específico, só quero nomes de diretórios com 6 dígitos. Aqui está o que funcionou, mas é não específico (ele me dará todos os nomes de diretório com dígitos):

find . -maxdepth 1 -type d -regex './[0-9]+'
ls -d +([0-9])

Isso também funcionou, mas me deu nomes de diretórios que começam com números e são seguidos por qualquer coisa:

find . -maxdepth 1 -type d -name '[0-9]*'

Pelo que eu li, não sei como fazer ls corresponder a N ocorrências porque ele usa globs e não expressões regulares (e não sei nada sobre globs). E o que não consigo entender é que nenhum desses funcionou usando find :

find . -maxdepth 1 -type d -regex './[0-9]{6}'
find . -maxdepth 1 -type d -name '[0-9]{6}'
find . -maxdepth 1 -type d -name '[0-9]+'

Já usei expressões regulares algumas vezes e não entendo o que há de errado com meus padrões (também estou surpreso que precisei especificar ./ com -regex )?

    
por Sheljohn 21.06.2015 / 18:05

1 resposta

4

O tipo regex padrão para o% GNUfind é emacs , que não suporta intervalos. Você pode especificar diferentes tipos de expressões regulares, como posix-egrep , o que resolverá seu problema:

find . -maxdepth 1 -type d -regextype posix-egrep -regex './[0-9]{6}'
    
por 21.06.2015 / 18:11