【发布时间】:2019-07-13 19:04:12
【问题描述】:
1。操作系统:Linux / Ubuntu x86/x64
2。任务:
编写一个 Bash shell 脚本以下载(大)csv 中的 URL(尽可能快/同时)并在列值上命名每个输出。
2.1 示例输入:
一个包含如下行的 CSV 文件:
001,http://farm6.staticflickr.com/5342/a.jpg
002,http://farm8.staticflickr.com/7413/b.jpg
003,http://farm4.staticflickr.com/3742/c.jpg
2.2 示例输出:
文件夹中的文件,outputs,包含以下文件:
001.jpg
002.jpg
003.jpg
3。我的尝试:
我主要尝试了两种风格。
1。使用下载工具的内部支持
以ariasc 为例,它支持使用-i 选项导入要下载的URL 文件,并且(我认为)它会以最大速度并行处理它。它确实有--force-sequential 选项来强制按行顺序下载,但我没能找到一种方法来实现命名部分。
2。先拆分
将文件拆分成文件并运行如下脚本来处理它:
#!/bin/bash
INPUT=$1
while IFS=, read serino url
do
aria2c -c "$url" --dir=outputs --out="$serino.jpg"
done < "$INPUT"
但是,这意味着对于每一行,它将再次重新启动aria2c,这似乎既费时又降低了速度。
虽然,可以多次在 bash 命令中运行脚本以获得“shell 级”并行性,但这似乎不是最好的方法。
有什么建议吗? 谢谢,
【问题讨论】:
-
参考:CURL 应该可以帮助你.. stackoverflow.com/questions/16362402/…
标签: bash shell ubuntu download