Windows 快速下载多个文件wget

Windows 快速下载多个文件wget,windows,bash,cygwin,wget,Windows,Bash,Cygwin,Wget,我想使用wget下载几个网页,为此我使用以下BASH: wget -x --load-cookies cookies.txt http://www.example.com/1 wget -x --load-cookies cookies.txt http://www.example.com/2 wget -x --load-cookies cookies.txt http://www.example.com/3 wget -x --load-cookies cookies.txt http://

我想使用wget下载几个网页,为此我使用以下BASH:

wget -x --load-cookies cookies.txt http://www.example.com/1
wget -x --load-cookies cookies.txt http://www.example.com/2
wget -x --load-cookies cookies.txt http://www.example.com/3
wget -x --load-cookies cookies.txt http://www.example.com/4
wget -x --load-cookies cookies.txt http://www.example.com/5
wget -x --load-cookies cookies.txt http://www.example.com/6
wget -x --load-cookies cookies.txt http://www.example.com/7
wget -x --load-cookies cookies.txt http://www.example.com/8
使用Cygwin:

sh download.sh

但是,每次我下载一个文件时,它都会重新连接到服务器,这需要时间,是否有更有效的方法从同一台服务器(example.com/…)大量下载文件?

不使用wget。Wget仍然是顺序的,这意味着它启动一个文件,分部分下载,直到完成并断开连接。这里没有办法在同一个连接上下载所有文件。您可以使用Aria2c这样的工具来实现这一点,但我不确定您会得到多大的改进。

不使用wget。Wget仍然是顺序的,这意味着它启动一个文件,分部分下载,直到完成并断开连接。这里没有办法在同一个连接上下载所有文件。您可能会使用类似Aria2c的工具来实现这一点,但我不确定您会得到多大的改进。

您可以尝试一下。它基本上是一个多线程的wget,你可以试试。它基本上是一个多线程的
wget

我同意前面关于打开新进程以便命令并行运行的一些回答。也就是说,每当我做这样的事情时,我都会使用一个非常方便的工具(它也可以与Cygwin一起使用),而这个工具将非常有用

根据您的示例,在安装了
parallel
之后,我将运行以下程序:

$ for i in {1..8}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{}
  • for
    循环只是将不同的参数逐行输入到
    并行
    。有多种方法可以做到这一点,但这只是一个例子
  • -j+0
    告诉
    parallel
    将每个作业分散到尽可能多的核心上
    man parallel
    将解释更多选项,而且它非常容易调整。你可以看一看,并调整到您的规格
因此,基本上,如果您有4个内核,并运行
top
命令,您将看到4个独立的
wget
进程同时运行。一个退出,另一个开始,直到所有8个作业都完成

由于我们主要关注的是web套接字,而不一定是处理,其他解决方案可能会更好,但这只是一种简单的方法来完成您正在尝试的内容,正如我所说,
parallel
功能非常丰富,因此您可以调整该命令,使其更好/更快

这绝对值得一试,因为举例来说,我不确定如果你把它分成两个并行作业会发生什么——这可能是4核系统的完美答案:

$ for i in {1..4}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{}
$ for i in {5..8}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{}
您仍然需要在子shell中运行这些命令,这样它们就不会按顺序执行(使用
(…)&
等等,正如其他人所建议的那样。如果我错了,请有人纠正我,但可能看起来是这样的:

$ (for i in {1..4}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{})&
$ (for i in {5..8}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{})&
wget
wget
wget
wget
parallel
wget
wget
wget
wget
parallel
top
的伪输出可能如下所示:

$ (for i in {1..4}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{})&
$ (for i in {5..8}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{})&
wget
wget
wget
wget
parallel
wget
wget
wget
wget
parallel

尽管如此,我从来没有使用过
mget
,它实际上可能是这项工作的正确工具。关于
Aria2
的回答有点不对劲,但他们说它是一个能够多线程下载的命令行下载工具是正确的。

我同意之前关于打开新程序的一些回答也就是说,每当我做这样的事情时,我都会使用一个非常方便的工具(它也可以与Cygwin一起使用),而这个工具将非常有用

根据您的示例,在安装了
parallel
之后,我将运行以下程序:

$ for i in {1..8}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{}
  • for
    循环只是将不同的参数逐行输入到
    parallel
    中。有多种方法可以做到这一点,但这只是一个示例
  • -j+0
    告诉
    parallel
    将每个作业分散到尽可能多的核心上。
    manparallel
    将解释更多选项,而且它非常可调整。您可以查看一下,并根据自己的规格进行调整
因此,基本上,如果您有4个内核,并运行
top
命令,您将看到4个独立的
wget
进程同时运行。一旦一个进程退出,另一个进程将启动,直到所有8个作业完成

由于我们主要关注的是web套接字,而不一定是处理,其他解决方案可能会更好,但这只是一种简单的方法来完成您正在尝试的内容,正如我所说,
parallel
功能非常丰富,因此您可以调整该命令,使其更好/更快

这绝对值得一试,因为举例来说,我不确定如果你把它分成两个并行作业会发生什么——这可能是4核系统的完美答案:

$ for i in {1..4}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{}
$ for i in {5..8}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{}
您仍然需要在子shell中运行这些命令,这样它们就不会按顺序执行(使用
(…)&
等等,正如其他人所建议的那样。如果我错了,请有人纠正我,但可能看起来是这样的:

$ (for i in {1..4}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{})&
$ (for i in {5..8}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{})&
wget
wget
wget
wget
parallel
wget
wget
wget
wget
parallel
top
的伪输出可能如下所示:

$ (for i in {1..4}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{})&
$ (for i in {5..8}; do echo $i; done | parallel -j+0 wget -x --load-cookies cookies.txt http://www.example.com/{})&
wget
wget
wget
wget
parallel
wget
wget
wget
wget
parallel

尽管如此,我从来没有使用过
mget
,它实际上可能是这项工作的正确工具。关于
Aria2
的回答有点不对劲,但他们说这是一个能够多线程下载的命令行下载工具,这是正确的。

您可以通过将作业放在ba中并行运行它们ckground(
&
在每行末尾),然后在末尾等待每个作业。您可以将作业放在后台(
&
在每行末尾),然后在末尾等待每个作业,从而并行运行所有作业。