Gerar sequência de argumento para passar para um programa?

8

Atualmente, estou usando a combinação de colchetes e globing para reproduzir vários arquivos no vlc de uma só vez:

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

Mas os números estão sempre em seqüência completa, existe uma maneira de especificá-lo de alguma forma um pouco mais simples, talvez algo como

vlc K20-{06-17}*

? Talvez use de seqalguma 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?

Lobo cinza
fonte
7
A sintaxe de um intervalo de expansão cinta é {m..n}- tãoK20-{06..17}*
steeldriver

Respostas:

13

Como o @steeldriver observa, o K20-{06..17}*cobre.

Exemplo, usando um echopara 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 *arquivo também será expandido se houver arquivos que correspondam ao nome no diretório de trabalho atual.

Então, vlc K20-{06..17}*vai conseguir o que deseja.

Mais informações sobre a expansão do bash no Manual de Referência do GNU Bash - Expansão de chaves . Ou man bash, leia:

Uma expressão de sequência assume o formato {x..y [.. incr]}, em que xey são números inteiros ou caracteres únicos e incr, um incremento opcional, é um número inteiro.

Assim:

$ 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
Steve
fonte