Como baixar muitos documentos no terminal de um servidor?

2

Eu tenho que escrever um script bash (.sh) com menos de 300 caracteres que baixa todos os genomas 22 neste servidor ftp://ftp.ncbi.nih.gov/genomes/Homo_sapiens/ (aqueles com extensão fa.gz) e os extrai. Meu primeiro foi apenas para escrever %código% mas eu não posso fazer isso para os 22 arquivos. O que eu descobri é que todos os arquivos têm o mesmo nome, exceto o número ao lado de CHM e chr. Por exemplo, o décimo genoma é ftp://ftp.ncbi.nih.gov/ genomas / Homo_sapiens / CHR_10 / hs_alt_CHM1_1.1_chr10.fa.gz Eu acho que eu tenho que fazer algum tipo de código de recursão, mas eu não sou muito experiente com bash, então qualquer ajuda é muito apreciada. Obrigada!

    
por Iván Mauricio Burbano 23.04.2015 / 03:04

1 resposta

2

Um simples loop deve ser suficiente:

for i in {1..22}
do
    wget "ftp://ftp.ncbi.nih.gov/genomes/Homo_sapiens/CHR_${i}/hs_alt_CHM1_1.1_chr${i}.fa.gz"
    gunzip "hs_alt_CHM1_1.1_chr${i}.fa.gz"
done

O índice de loop não precisa ser apenas números, você também pode obter os arquivos MT , Un , X e Y , com:

for i in {1..22} MT Un X Y

Como o primeiro conjunto de números precisa ser preenchido com zero, você pode usar printf para isso:

Ou:

firsti="$(printf "%02d" $i)"
wget "ftp://ftp.ncbi.nih.gov/genomes/Homo_sapiens/CHR_${firsti}/hs_alt_CHM1_1.1_chr${i}.fa.gz"

Você pode executar um teste para cada loop, mas é mais simples mover os caracteres ( MT Un X Y ) para um loop separado usando o original wget .

    
por 23.04.2015 / 03:10