Gerar seqüência de argumentos para passar para um programa?

8

Atualmente, estou usando a combinação de chaves e balões para reproduzir vários arquivos em vlc de uma só vez:

vlc K20-{06,07,08,09,10,11,12,13,14,15,16,17}*

Mas os números são sempre a sequência completa, existe uma maneira de especificá-lo um pouco mais simples, talvez algo como

vlc K20-{06-17}*

Talvez use seq de alguma forma?

eu posso usar

   $ echo K20-{$(seq -s, -f "%02.0f" 06 17)}*
K20-{06,07,08,09,10,11,12,13,14,15,16,17}*

mas isso não parece expandir o * . Alguma maneira de contornar isso?

    
por graywolf 08.07.2018 / 22:48

1 resposta

13

Como anotações @steeldriver, K20-{06..17}* o cobre.

Exemplo, usando um echo para teste / validação:

$ echo vlc K20-{06,07,08,09,10,11,12,13,14,15,16,17}*
vlc K20-06* K20-07* K20-08* K20-09* K20-10* K20-11* K20-12* K20-13* K20-14* K20-15* K20-16* K20-17*
$ echo vlc K20-{06..17}*
vlc K20-06* K20-07* K20-08* K20-09* K20-10* K20-11* K20-12* K20-13* K20-14* K20-15* K20-16* K20-17*

O * também será expandido se houver arquivos que correspondam ao nome no diretório de trabalho atual.

Então, vlc K20-{06..17}* alcançará o que você deseja.

Mais informações sobre expansão do bash em GNU Bash Reference Manual - Expansão de Brace . Ou de man bash , leia:

A sequence expression takes the form {x..y[..incr]}, where x and y are either integers or single characters, and incr, an optional increment, is an integer.

Então:

$ echo K20-{06..10}
K20-06 K20-07 K20-08 K20-09 K20-10

$ echo K20-{06..10..2}
K20-06 K20-08 K20-10
    
por 08.07.2018 / 23:12

Tags