сделать мой скрипт автозагрузки лучше - PullRequest
1 голос
/ 24 апреля 2009

Итак, я хочу загрузить несколько файлов с Rapidshare. Это то, что у меня сейчас есть. Я создал печенье, запустив -

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

и теперь у меня есть сценарий оболочки, который я запускаю, который выглядит так -

#!/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. Сценарию оболочки необходимо прочитать файлы для загрузки из файла.
  2. Сценарий оболочки должен загружать от 2 до 8 файлов одновременно.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 24 апреля 2009

Если вам нужны параллельные задания, подумайте 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.

0 голосов
/ 24 апреля 2009

Попробуй это. Я думаю, что это должно делать то, что вы хотите:

#! /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
...