首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使我的自动下载shell脚本更好

使我的自动下载shell脚本更好
EN

Stack Overflow用户
提问于 2009-04-24 11:37:37
回答 2查看 1.6K关注 0票数 1

所以我想从rapidshare下载多个文件。这就是我现在所拥有的。我通过跑步创造了一个饼干-

代码语言:javascript
复制
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脚本,它看起来像这样-

代码语言:javascript
复制
#!/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个文件下载任何地方。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2009-04-24 16:20:20

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

代码语言:javascript
复制
#!/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,然后运行

代码语言:javascript
复制
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 3.79和3.81进行测试。

票数 3
EN

Stack Overflow用户

发布于 2009-04-24 11:58:52

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

代码语言:javascript
复制
#! /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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/785494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档