对 cat 的所有参数应用过滤器

对 cat 的所有参数应用过滤器

我有一个服务器上的文件列表,假设匹配模式http://example.com/abcd-{0..99}.zip

我想下载然后解压所有这些文件(它们只是压缩的文本,每个 .zip 中都有一个文件),将它们连接到单个流中,然后将其导入另一个程序。我知道要下载它们,最好使用 curl,要解压,我可以使用 funzip,但 funzip 只接受一个 .zip 作为参数。

bash 是否能够轻松地做到这一点(如果可以,怎么做?),或者我应该放弃并在 python 中做到这一点?

答案1

你没有说为什么要使用curland funzip。我认为对于你的目的来说wgetandunzip会更好。假设你的文件列表在文件中文件列表。然后要下载所有这些文件,请执行

wget -i filelist

然后解压缩这些文件并将它们导入到某个程序中,执行

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

请注意,您必须用引号括住给定的 zip 文件名模式,unzip以便它不会被您的 shell 扩展。

如果您还没有要下载的文件列表,但它们的名称遵循您给出的模式,您可以按如下方式创建列表。

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

答案2

我最终编写的脚本是:

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

相关内容