Aplicando um filtro a todos os argumentos do gato

0

Eu tenho uma lista de arquivos em um servidor, digamos que corresponda ao padrão http://example.com/abcd-{0..99}.zip .

Eu quero fazer o download, depois descomprimir todos esses arquivos (eles são apenas texto compactado, com um arquivo em cada .zip), concatená-los em um único fluxo e, em seguida, enviá-los para um programa diferente. Eu sei para baixá-los, é melhor usar o curl, e para descompactar, eu posso usar o funzip, mas o funzip leva apenas um único .zip como parâmetro.

O bash é capaz de fazer isso sem problemas (se sim, como?), ou eu deveria desistir e fazer isso em python?

    
por Clark Gaebel 17.05.2012 / 04:40

2 respostas

0

O script que acabei escrevendo para fazer isso é:

echo http://example.com/some-data{0..799}.csv.zip | xargs -n1 -P8 ./download-file

e o conteúdo do arquivo de download são:

#!/bin/bash
NAME=$(basename $1 .zip).xz
wget -O- $1 | funzip | nice -n5 xz -z9 > $NAME
    
por 31.05.2012 / 23:05
2

Você não disse por que queria usar curl e funzip . Eu acho que para seus propósitos, wget e unzip funcionariam melhor. Digamos que sua lista de arquivos esteja no arquivo filelist . Então, para baixar todos esses arquivos, execute

wget -i filelist

Em seguida, para descompactar esses arquivos e enviá-los para algum programa, execute

unzip -p 'abcd-*.zip' | program

Note que você deve citar o padrão de nome de arquivo zip dado a unzip para que ele não seja expandido pelo seu shell.

Se você ainda não tem uma lista de arquivos a serem baixados, mas seus nomes seguem o padrão que você deu, você pode criar uma lista como segue.

seq 0 99 | while read n; do echo "http://example.com/abcd-$n.zip"; done > filelist
    
por 17.05.2012 / 07:32