Como faço o download de todos os arquivos listados em um array?

Como faço o download de todos os arquivos listados em um array?

Quero baixar todos os arquivos emeste diretório GitHubpara /usr/share/enlightenment/data/config. Eu tenho esse script:

L=('e.cfg' 'e_randr.cfg' 'exehist.cfg' 'module.battery.cfg' 'module.clock.cfg' 'module.conf.cfg' 'module.everything-apps.cfg' 'module.everything-files.cfg' 'module.everything.cfg' 'module.gadman.cfg' 'module.ibar.cfg' 'module.notification.cfg' 'module.pager.cfg' 'module.syscon.cfg' 'module.tasks.cfg')
pushd /usr/share/enlightenment/data/config
for i in $L
do
  sudo wget -c $JEF/$i #$JEF is defined in my ~/.bashrc script
done
popd

mas é só baixar e.cfge pronto.

Responder1

Em bashor ksh, você precisa iterar todos os elementos do array com:

for i in "${L[@]}"; do wget ....; done

${L[@]}será expandido para todos os elementos da matriz Le foré usado para iterar sobre eles.

Se você usar $Lis bashou ksh, ele se comportará como, ${L[0]}ou seja, no seu caso, você obterá apenas o primeiro elemento do array.

Responder2

Eu mesmo descobri a resposta olhando paraVariáveis ​​de matrizno Guia para Iniciantes do Bash.

Isto é o que o script deveria ser:

L=('e.cfg' 'e_randr.cfg' 'exehist.cfg' 'module.battery.cfg' 'module.clock.cfg' 'module.conf.cfg' 'module.everything-apps.cfg' 'module.everything-files.cfg' 'module.everything.cfg' 'module.gadman.cfg' 'module.ibar.cfg' 'module.notification.cfg' 'module.pager.cfg' 'module.syscon.cfg' 'module.tasks.cfg')
pushd /usr/share/enlightenment/data/config
for i in ${L[*]}
do
  sudo wget -c $JEF/$i
done
popd

Responder3

Que tal agora? Menos aspas, parênteses e colchetes e outras sintaxes!:

L='e.cfg e_randr.cfg exehist.cfg etc'

for i in $L
do
  echo wget -c "$JEF/$i" #$JEF is defined in my ~/.bashrc script
done

Esta é a maneira mais antiga e comum de fazer isso. Mais pessoas entendem isso. Matrizes são extensões que nunca usei.

informação relacionada