Substituindo o número no nome do arquivo em bash [closed]

1

Estou tentando baixar vários arquivos, como:

www.example.com/v1/file.txt
www.example.com/v2/file.txt
www.example.com/v3/file.txt
...

O seguinte comando não funciona, pois ele realmente procura por um arquivo "r {1..99} /file.txt":

for i in {10..99}
do
 wget "www.example.com/v"$i"/file.txt" -O "file_"$i".txt"
done

Também não faz diferença se eu colocar cotações adicionais "" por volta de $ i. O que estou fazendo errado?

    
por Moronic 24.02.2014 / 17:10

3 respostas

1

Tente colocar seu nome de variável entre chaves como este:

for i in {10..99} ; do echo wget "www.example.com/v${i}/file.txt" ; done

Pergunta mal interpretada. seq ou set -B é o caminho a percorrer ...

    
por 24.02.2014 / 17:34
1

Meu palpite é que você está usando uma versão mais antiga do bash ou sh que não suporta expansão de chaves. Tente isso:

for i in $(seq 10 99); 
do
 wget www.example.com/v"$i"/file.txt -O file_"$i".txt
done

Outra possibilidade é que você desativou a expansão de chaves, pode ativá-las com set -B e desativar com set +B :

$ set +B
$ echo {1..10}
{1..10}
$ set -B
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
    
por 24.02.2014 / 17:33
1

Talvez você possa tentar com o comando seq :

for i in $(seq 10 99)
do
 wget "www.example.com/v"$i"/file.txt" -O "file_"$i".txt"
done

Isso funciona para mim usando 3.2.51 (1) -release (a última versão estável é 4.2) :

$ bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.

Ou talvez você esteja usando outro shell:

$ echo $SHELL
/bin/bash
    
por 24.02.2014 / 17:30

Tags