Listar todos os arquivos que terminam com 10 ou 11 ou 12

5

Para listar todos os arquivos terminados em 10 ou 11 ou 12, tentei ls *[10-12] e ls *[10,11,12] , mas eles não estão funcionando. Eu não sei porque. Alguém pode me ajudar?

    
por Arpit 12.05.2015 / 13:27

4 respostas

13

[...] corresponde a um caractere ( elemento de agrupamento em alguns shells) se estiver no conjunto especificado.

[10-12] significa o caractere 1 ou caracteres de 0 a 1 ou caractere 2 , portanto, o mesmo que [102] ou [0-2] .

[10,11,12] significa 1 , 0 , , , 1 ... Então, o mesmo que [,0-2] .

Aqui você quer:

ls -d -- *1[0-2]

Ou seja, nomes de arquivo (não ocultos) que terminam em 1 seguidos por qualquer um dos caracteres 0 , 1 ou 2 .

Agora, tenha em atenção que também corresponde a foo110 ou foo112345612 .

Se você não quiser isso, precisará de algo como:

ls -d -- *[!0-9]1[0-2] 1[0-2]

Isso, no entanto, não corresponderia a foo010

Se estiver fora de foo10 , foo00010 , foo110 você deseja que foo10 e foo00010 correspondam, então com ksh ou bash -O extglob ou zsh -o kshglob :

ls -d -- !(*[0-9])*(0)1[0-2]

Observe que, exceto com zsh , se algum desses padrões não corresponder, os padrões serão passados como estão para ls , portanto, você pode acabar listando arquivos indesejados se houver arquivos com nomes como esse. Com bash , você pode definir a opção failglob para contornar isso.

zsh é o único shell que tem um operador glob para corresponder a intervalos de números.

ls -d -- *<10-12>

corresponderia os arquivos que terminam em um número de 10 a 12. Ele também corresponderia a foo110 , já que é foo1 seguido por 10 . Você poderia fazer (com extendedglob ):

ls -d -- (^*[0-9])<10-12>

embora.

zsh é também o shell que introduziu o tipo {10..12} da expansão da chave (copiada por ksh93 e bash alguns anos depois).

No entanto, como o {10,11,12} equivalente, isso é não globbing. Essa é uma forma de expansão que é feita antes de globbing.

ls -d -- *{10..12}

é expandido primeiro para:

ls -d -- *10 *11 *12

Se algum desses 3 globs falhar, o comando será cancelado em zsh (e bash -O failglob ).

    
por 12.05.2015 / 13:40
6

Tente isto:

ls *{10,11,12}

ou

ls -l *{10,11,12}

(não é possível mostrar arquivos ocultos)

    
por 12.05.2015 / 13:43
5

Isso deve funcionar:

ls -d -- *1[0-2]

Lembre-se de que [] representa um conjunto de caracteres e, no caso de números, pode ir de [0-9]

    
por 12.05.2015 / 13:32
0

ls *@(10|11|12) é o que você está procurando.

Isso requer que extglob seja ativado usando shopt , ou seja, shopt -s extglob . Além disso, você pode anexar essa linha a ~/.bashrc para ativá-la permanentemente.

Para mais informações sobre por que isso funciona, consulte a página de manual oficial do Bash sobre correspondência de padrões .

    
por 12.05.2015 / 23:38

Tags