1

所以我想从 rapidshare 下载多个文件。这是我目前拥有的。我通过运行创建了一个 cookie-

wget \
    --save-cookies ~/.cookies/rapidshare \
    --post-data "login=USERNAME&password=PASSWORD" \
    --no-check-certificate \
    -O - \
    https://ssl.rapidshare.com/cgi-bin/premiumzone.cgi \
    > /dev/null

现在我有一个运行的 shell 脚本,看起来像这样-

#!/bin/bash
wget -c --load-cookies ~/.cookies/rapidshare http://rapidshare.com/files/219920856/file1.rar
wget -c --load-cookies ~/.cookies/rapidshare http://rapidshare.com/files/393839302/file2.rar
wget -c --load-cookies ~/.cookies/rapidshare http://rapidshare.com/files/398293204/file3.rar
....

我想要两件事-

  1. shell 脚本需要读取文件以从文件中下载。
  2. shell 脚本应该一次下载 2 到 8 个文件。

谢谢!

4

2 回答 2

3

当您想要并行作业时,请考虑make.

#!/usr/bin/make -f

login:
        wget -qO/dev/null \
--save-cookies ~/.cookies/rapidshare \
--post-data "login=USERNAME&password=PASSWORD" \
--no-check-certificate \
https://ssl.rapidshare.com/cgi-bin/premiumzone.cgi
$(MAKEFILES):
%: login
        wget -ca$(addsuffix .log,$(notdir $@)) \
--load-cookies ~/.cookies/rapidshare $@
        @echo "Downloaded $@ (log in $(addsuffix .log,$(notdir $@)))"

将其保存在rsget某个位置$PATH(确保使用制表符而不是空格进行缩进),给它chmod +x,然后运行

rsget -kj8 \
    http://rapidshare.com/files/219920856/file1.rar \
    http://rapidshare.com/files/393839302/file2.rar \
    http://rapidshare.com/files/398293204/file3.rar \
    ...

这将登录,然后是wget每个目标。 -j8告诉make并行运行多达 8 个作业,并且-k意味着“即使目标返回失败也要继续”。

编辑

使用 GNU Make 3.79 和 3.81 测试。

于 2009-04-24T16:20:20.113 回答
0

尝试这个。我认为它应该做你想做的事:

#! /bin/bash

MAX_CONCURRENT=8
URL_BASE="http://rapidshare.com/files/"
cookie_file=~/.cookies/rapidshare

# do your login thing here...

[ -n "$1" -a -f "$1" ] || { echo "please provide a file containing the stuff to download"; exit 1; }

inputfile=$1
count=0
while read x; do
  if [ $count -ge $MAX_CONCURRENT ]; then
    count=0
    wait
  fi
  { wget -c --load-cookies "$cookie_file" "${URL_BASE}$x" && echo "Downloaded $x"; } &
  count=$((count + 1))
done < $inputfile
于 2009-04-24T11:58:52.300 回答