У меня есть список файлов на сервере, скажем, совпадающий с шаблоном http://example.com/abcd-{0..99}.zip .

Я хочу скачать, затем распаковать все эти файлы (это просто сжатый текст, по одному файлу в каждом .zip), объединить их в один поток, а затем направить в другую программу. Я знаю, что для их загрузки лучше всего использовать curl, а чтобы разархивировать, я могу использовать funzip, но funzip принимает только один .zip в качестве параметра.

Способен ли bash сделать это безболезненно (если да, то как?), Или я должен просто сдаться и сделать это на python?

2 ответа2

2

Вы не сказали, почему вы хотели использовать curl и funzip . Я думаю, что для ваших целей wget и unzip будут работать лучше. Скажем, ваш список файлов находится в списке файлов . Затем, чтобы загрузить все эти файлы, выполните

wget -i filelist

Затем, чтобы распаковать эти файлы и передать их в какую-либо программу, выполните

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

Обратите внимание, что вы должны заключить в кавычки шаблон имени файла zip, данный unzip чтобы он не раскрывался вашей оболочкой.

Если у вас еще нет списка файлов для загрузки, но их имена соответствуют заданному вами шаблону, вы можете создать список следующим образом.

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

Сценарий, который я написал для этого:

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

и содержимое файла загрузки:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .