Usando ls
canalizado para grep -E
(grep estendido com recursos adicionais de regexp) para pesquisar todos os nomes de arquivos com apenas caracteres numéricos:
ls | grep -E '^[0-9]+$'
Na linha de comando do linux, como posso listar apenas nomes de arquivos numéricos (somente nomes com 0 a 9) no diretório atual?
Esta é uma pergunta subseqüente a Como posso obter a lista de ids de processo no sistema no prompt de comando do linux? , onde eu corri ls
on /proc/
. Agora estou tentando excluir tudo, exceto os diretórios de ID do processo.
Apesar do título da pergunta, quero apresentar uma solução com find
. Ele tem uma opção de regex ( -regex
), portanto, [0-9]*
corresponderá aos nomes de arquivos que consistem apenas em dígitos.
Para encontrar apenas arquivos ( -type f
) recursivamente abaixo do diretório atual ( .
) use
find . -type f -regex ".*/[0-9]*"
O .*/
no regex é necessário, porque regex " é uma correspondência em todo o caminho, não em uma pesquisa. " ( man find
). Então, se você quiser encontrar apenas arquivos no diretório atual, use \./
:
find . -type f -regex "\./[0-9]*"
No entanto, isso não é muito ideal, já que também encontramos procuras recursivas neste caso e apenas filtra os resultados desejados posteriormente.
Se você quiser usar ls
, poderá usar:
ls *[[:digit:]]*
O operador *
splat corresponderá a qualquer [[:digit:]]
. Você também pode usar:
ls *[0-9]*
Que também corresponde ao arquivo ou diretório com um dígito de 0 a 9.
Se você tiver subdiretórios que correspondam ao padrão glob, você poderá usar a opção -d
para fazer com que o ls não os recrute.
Você pode usar ls +([0-9])
para corresponder apenas aos arquivos com nomes numéricos.
Tags command-line linux linux-mint