Como listar todos os arquivos no diretório atual cujo segundo caractere é um dígito? [duplicado]

0

Eu tentei ls ?[0-9]* , isso corresponde a todos os arquivos no diretório atual, mas também expande todos os diretórios no diretório atual e corresponde aos arquivos em qualquer subdiretório. Eu quero * para corresponder apenas ao diretório atual.

---- Program output --------------------------------
f1
f2
g2t
g3t

d2:

d4:

--- Expected output (text)---
d2
d4
f1
f2
g2t
g3t

Aqui d2 e d4 são diretórios, enquanto outros são arquivos. Eu quero que eles sejam listados como d2 e d4 e não como d2: e d4:

    
por asdf 18.06.2018 / 05:10

2 respostas

1

?[0-9]* somente expande para nomes no diretório atual que tem um dígito como segundo caractere. ls , ao obter um nome de diretório, mostrará obviamente o conteúdo desse diretório, o que significa que você terá que dizer ls para não fazer isso.

Você faz isso com ls -d :

ls -d -- ?[0-9]*

ou

ls -d ./?[0-9]*

O -- e ./ impedirá que ls interprete o primeiro caractere do nome do arquivo como uma opção se começar com um traço.

Se você estiver interessado apenas em não-diretórios (e quiser também eliminar links simbólicos para diretórios), então há duas maneiras óbvias de se fazer isso.

  1. Use um loop de shell, testando cada nome para ver se é um diretório ou não e exiba o nome, se não for:

    for name in ?[0-9]*; do
        [ ! -d "$name" ] && printf '%s\n' "$name"
    done
    

    Para incluir arquivos que começam com um ponto (arquivos ocultos), um shell pode ter uma opção dotglob shell que você pode definir antes do loop ( shopt -s dotglob in bash ).

  2. Use find para procurar por não diretórios (e eliminar links simbólicos para diretórios) no diretório atual:

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

    A opção -L para find faz com que -type d se refira ao destino de qualquer link simbólico (se o nome do caminho atual for um link simbólico).

por 18.06.2018 / 07:10
-1

Você poderia canalizar ls para egrep usando um regex assim:

ls | egrep '.\d.*'
    
por 18.06.2018 / 05:29