Загрузка файлов из интернета

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
nilpointer
Сообщения: 149
ОС: Linux

Загрузка файлов из интернета

Сообщение nilpointer »

Есть такая задача.

Как с помощью shell можно автоматизировать процесс загрузки файлов с интернета.
Так чтобы на сервере поставить загрузку на ночь и до утра забыть?

Для примера возьмем сайт http://film.psihov.net.ua/

Скажем, необходимо скачать пару серий сериала Chack

http://film.psihov.net.ua/?action=fullcard&id=3388

На веб странице представлены ссылки для загрузки серий,
которые можно загрузить с помощь, скажем, firefox.
Следить за загрузкой серий и щелкать лишний раз,
при необходимости загрузки следующей серии, трата лишнего времени.

Как бы этот процесс автоматизировать?

В firefox можно получить ссылку для загрузки серии( или очередного фильма)

ftp://series:series@ftp3.psihov.net.ua/Ch...huck_s02e01.avi

Каждая следующая ссылка для сериала изменяется номером названия файла для загрузки
(для каждого фильма своя сылка)

// ftp://series:series@ftp3.psihov.net.ua/Ch...huck_s02e01.avi
// ftp://series:series@ftp3.psihov.net.ua/Ch...huck_s02e02.avi
// ftp://series:series@ftp3.psihov.net.ua/Ch...huck_s02e03.avi
...................................

Вариант в консоли

firefox ftp://series:series@ftp3.psihov.net.ua/Ch...huck_s02e01.avi

требует подтверждения загрузки. А ставить галочку в настройках на автоматическую
загрузку аналогичных файлов не очень хочется, так как при случайном нажатии, при просмотре для выбора,
будет грузить не то что необходимо.
К тому же при повторении для следующей серии

firefox ftp://series:series@ftp3.psihov.net.ua/Ch...huck_s02e02.avi
............
будет открываться еще одно окно firefox


Как бы решить такую задачу?

Возможно управление firefox с командной строки?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Загрузка файлов из интернета

Сообщение /dev/random »

wget
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Загрузка файлов из интернета

Сообщение SLEDopit »

Код: Выделить всё

for i in `seq 10`; do wget ftp://series:series@ftp3.psihov.net.ua/Chuck%5CChuck_s02e$(printf '%0.2d' $i).avi;done
где 10 - количество серий
при желании скрипт можно довести до того, что он сам и ссылки будет со страницы парсить.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Загрузка файлов из интернета

Сообщение /dev/random »

SLEDopit писал(а):
06.02.2010 17:11

Код: Выделить всё

for i in `seq 10`; do wget ftp://series:series@ftp3.psihov.net.ua/Chuck%5CChuck_s02e$(printf '%0.2d' $i).avi;done

Код: Выделить всё

seq -w 10 | xargs -i wget 'ftp://series:series@ftp3.psihov.net.ua/Chuck%5CChuck_s02e{}.avi'
Спасибо сказали:
Аватара пользователя
nilpointer
Сообщения: 149
ОС: Linux

Re: Загрузка файлов из интернета

Сообщение nilpointer »

Спасибо! :)

А как определить каталог,
в который будут сохранятся файлы загрузки?

При назначении задания на загрузку,
можно прописать куда необходимо производить сохранение файлов загрузки?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Загрузка файлов из интернета

Сообщение /dev/random »

В текущий. Используйте cd.
Спасибо сказали:
Аватара пользователя
nilpointer
Сообщения: 149
ОС: Linux

Re: Загрузка файлов из интернета

Сообщение nilpointer »

/dev/random писал(а):
06.02.2010 17:36
В текущий. Используйте cd.


То есть, сначала определить каталог cd /..... , а потом запустить команду на загрузку.

/////////////////////

А как на счет многозадачности.
Так, чтобы работал kppp и шла загрузка, по завершении которой kppp бы выключился

Такой ведь вариант не пройдет

Код: Выделить всё

cd /library/ 0100 Видео/1200 Сериалы/Chuck/01;
kppp  -c  IT
for i in `seq 10`; do wget ftp://series:series@ftp3.psihov.net.ua/Chuck%5CChuck_s02e$(printf '%0.2d' $i).avi;done;
kppp -k -q;
halt


kppp ведь в процессе выполнения.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Загрузка файлов из интернета

Сообщение /dev/random »

nilpointer писал(а):
06.02.2010 19:04
Так, чтобы работал kppp и шла загрузка, по завершении которой kppp бы выключился

Оу. А что, kppp ещё кто-то пользуется?
Спасибо сказали:
Аватара пользователя
nilpointer
Сообщения: 149
ОС: Linux

Re: Загрузка файлов из интернета

Сообщение nilpointer »

/dev/random писал(а):
06.02.2010 19:09
nilpointer писал(а):
06.02.2010 19:04
Так, чтобы работал kppp и шла загрузка, по завершении которой kppp бы выключился

Оу. А что, kppp ещё кто-то пользуется?


Я могу подключить интернет только через kppp, USB 3G modem CDMA

А есть вариант kppp под консоль, если не будет KDE
если сервер будет без рабочего стола
Сервер дома, для личных нужд.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Загрузка файлов из интернета

Сообщение /dev/random »

nilpointer писал(а):
06.02.2010 19:14
А есть вариант kppp под консоль, если не будет KDE

pppd. wvdial. Куча всего. А ещё большинство дистрибутивов позволяют настраивать соединение системными средствами, и поднимать/опускать его через ifup/ifdown или аналогичные команды.
Спасибо сказали:
Аватара пользователя
nilpointer
Сообщения: 149
ОС: Linux

Re: Загрузка файлов из интернета

Сообщение nilpointer »

А как в этом варианте?

Код: Выделить всё

kppp  -c  IT;
for i in `seq 10`; do wget ftp://series:series@ftp3.psihov.net.ua/Chuck%5CChuck_s02e$(printf '%0.2d' $i).avi;done;
kppp -k -q;


kppp запускается и в режиме исполнения, занимая окно командной строки.
Как паралельно запустить исполнение загрузки, по завершении которой бы
исполнение программы kppp завершилось.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Загрузка файлов из интернета

Сообщение /dev/random »

nilpointer писал(а):
06.02.2010 19:28
А как в этом варианте?

Код: Выделить всё

kppp  -c  IT;
for i in `seq 10`; do wget ftp://series:series@ftp3.psihov.net.ua/Chuck%5CChuck_s02e$(printf '%0.2d' $i).avi;done;
kppp -k -q;


kppp запускается и в режиме исполнения, занимая окно командной строки.
Как паралельно запустить исполнение загрузки, по завершении которой бы
исполнение программы kppp завершилось.


kppp -c IT &
Это запуск в фоне. А затем подождать несколько секунд, пока подключится сеть. Например, так:
until ping -c 2 yandex.ru; do sleep 5; done
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: Загрузка файлов из интернета

Сообщение BIgAndy »

nilpointer писал(а):
06.02.2010 19:04
А как на счет многозадачности.
Так, чтобы работал kppp и шла загрузка, по завершении которой kppp бы выключился

1) какое отношение многозадачность имеет к загрузке?
1) кто мешает включить DOD?
Спасибо сказали:
Аватара пользователя
nilpointer
Сообщения: 149
ОС: Linux

Re: Загрузка файлов из интернета

Сообщение nilpointer »

SLEDopit писал(а):
06.02.2010 17:11

Код: Выделить всё

for i in `seq 10`; do wget ftp://series:series@ftp3.psihov.net.ua/Chuck%5CChuck_s02e$(printf '%0.2d' $i).avi;done
где 10 - количество серий
при желании скрипт можно довести до того, что он сам и ссылки будет со страницы парсить.


А если необходимо скажем с 12 по 16 серии, то как можно организовать цикл?
И можно ли делать цикл в цикле?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Загрузка файлов из интернета

Сообщение /dev/random »

nilpointer писал(а):
07.02.2010 01:07
А если необходимо скажем с 12 по 16 серии, то как можно организовать цикл?

seq 12 16, остальное так же.

nilpointer писал(а):
07.02.2010 01:07
И можно ли делать цикл в цикле?

Да.
Спасибо сказали:
Аватара пользователя
nilpointer
Сообщения: 149
ОС: Linux

Re: Загрузка файлов из интернета

Сообщение nilpointer »

Правильно ли будет?

Код: Выделить всё

for (( i=12; a <= 16; i++))  do wget ftp://series:series@ftp3.psihov.net.ua/Chuck%5CChuck_s02e$(printf '%0.2d' $i).avi;done
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Загрузка файлов из интернета

Сообщение /dev/random »

nilpointer писал(а):
07.02.2010 01:17

Код: Выделить всё

for (( i=12; a <= 16; i++))  do wget ftp://series:series@ftp3.psihov.net.ua/Chuck%5CChuck_s02e$(printf '%0.2d' $i).avi;done

Почти. После "))" ставится ";" или перевод строки.
Спасибо сказали:
Аватара пользователя
nilpointer
Сообщения: 149
ОС: Linux

Re: Загрузка файлов из интернета

Сообщение nilpointer »

Тоесть правильно

Код: Выделить всё

for (( i=12; a <= 16; i++));  do wget ftp://series:series@ftp3.psihov.net.ua/Chuck%5CChuck_s02e$(printf '%0.2d' $i).avi;done


А двойные дужки обязательны, или я тоже перестарался.
Вернее я нашел один с примеров и подумал что подойдет.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Загрузка файлов из интернета

Сообщение /dev/random »

Да, правильно.
Да, обязательно.
Спасибо сказали:
Аватара пользователя
nilpointer
Сообщения: 149
ОС: Linux

Re: Загрузка файлов из интернета

Сообщение nilpointer »

И последнее к этой теме
правильно ли

Код: Выделить всё

for (( i=1; a <= 3; i++));  do for (( j=1; a <= 10; j++)); do
 wget ftp://series:series@ftp3.psihov.net.ua/Chuck%5CChuck_s0$(printf '%0.2d' $i)e$(printf '%0.2d' $j).avi;
done; done
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Загрузка файлов из интернета

Сообщение /dev/random »

nilpointer писал(а):
07.02.2010 01:39
И последнее к этой теме
правильно ли

Код: Выделить всё

for (( i=1; a <= 3; i++));  do for (( j=1; a <= 10; j++)); do
wget ftp://series:series@ftp3.psihov.net.ua/Chuck%5CChuck_s0$(printf '%0.2d' $i)e$(printf '%0.2d' $j).avi;
done; done

Да. Кстати, для проверки можно было заменить wget на echo и запустить.
Спасибо сказали:
Аватара пользователя
nilpointer
Сообщения: 149
ОС: Linux

Re: Загрузка файлов из интернета

Сообщение nilpointer »

Спасибо! :)
Спасибо сказали:
smaharbA
Сообщения: 229
ОС: Windows Vista

Re: Загрузка файлов из интернета

Сообщение smaharbA »

/dev/random писал(а):
06.02.2010 17:36
В текущий. Используйте cd.



Код: Выделить всё

... -P $HOME/download
Я конечно далек от мысли...(с)
Спасибо сказали:
Аватара пользователя
nilpointer
Сообщения: 149
ОС: Linux

Re: Загрузка файлов из интернета

Сообщение nilpointer »

Одну вещь в этой конструкции я все же не понял.

Код: Выделить всё

for (( i=1; a <= 12; i++));  do wget ftp://series:series@ftp3.psihov.net.ua/Chuck%5CChuck_s02e$(printf '%0.2d' $i).avi;done

Chuck%5CChuck_s02e01.avi
Chuck%5CChuck_s02e11.avi

Chuck%5CChuck_s02e$(printf '%0.2d' $i).avi

Как определяется когда i<10 добавлять спереди 0 и
если i>=10 нет? По какому принципу?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Загрузка файлов из интернета

Сообщение /dev/random »

printf %0.2d
смысл тот же, что и в сишном printf: 2 символа, дополнять слева нулями. Подробности в любой книге по C или man 3 printf
Спасибо сказали:
Аватара пользователя
nilpointer
Сообщения: 149
ОС: Linux

Re: Загрузка файлов из интернета

Сообщение nilpointer »

Возможно ли с помощью wget загружать файлы с интернета используя список файлов, который сохранен в простом файле текстового формата?

Например файл list такого содержания:
...
ftp://movies:movies@ftp2.psihov.net.ua/Mortal%20Kombat.avi
ftp://movies:movies@ftp2.psihov.net.ua/Mortal_Combat_2.avi
ftp://movies:movies@ftp4.psihov.net.ua/Sniper.avi
ftp://movies:movies@ftp4.psihov.net.ua/Hottabych.avi
ftp://movies:movies@ftp4.psihov.net.ua/Armageddon.avi
ftp://movies:movies@ftp4.psihov.net.ua/Below.avi
...

Как задать команду в командной строке, при условии что файл list
уже подготовлен и находится в активном каталоге,
в который будут сохранятся скачиваемые файлы.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Загрузка файлов из интернета

Сообщение /dev/random »

Опция -i, читайте внимательнее маны.
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: Загрузка файлов из интернета

Сообщение Luinnar »

nilpointer писал(а):
07.02.2010 11:23
Одну вещь в этой конструкции я все же не понял.

Код: Выделить всё

for (( i=1; a <= 12; i++));  do wget ftp://series:series@ftp3.psihov.net.ua/Chuck%5CChuck_s02e$(printf '%0.2d' $i).avi;done

Chuck%5CChuck_s02e01.avi
Chuck%5CChuck_s02e11.avi

Chuck%5CChuck_s02e$(printf '%0.2d' $i).avi

Как определяется когда i<10 добавлять спереди 0 и
если i>=10 нет? По какому принципу?


На мой взгляд здесь проще было бы так сделать:

Код: Выделить всё

for i in `seq -w 1 12`; do wget ftp://series:series@ftp3.psihov.net.ua/Chuck%5CChuck_s02e$i.avi; done


Команда 'seq -w' как раз и дополняет числа нулями спереди:

Код: Выделить всё

# echo `seq -w 1 12`
01 02 03 04 05 06 07 08 09 10 11 12
Спасибо сказали: