В соседней ветке я поделился скриптами для скачивания торрентов. Думаю, что может быть кому-нибудь пригодятся и мои скрипты для скачивания файлов по ftp/http. В принципе, это всего лишь первая версия скриптов (честно говоря, с линуксом и shell скриптами для него я познакомился всего 10 дней назад), но тем не менее скрипты вполне стабильны и более-менее защищены от "дурака" и от случайных сбоев.
Исходные данные:
из дополнительных программ для скриптов нужен только screen (если не стоит - поставьте)
Code:
ipkg install screen
я создал каталоги /opt/source и /opt/download, в первый необходимо положить список файлов, которые надо скачать*, во второй, собственно, эти файлы будут качаться.
*) список должен иметь название list (без расширения), внутри находится просто список файлов. Список можно создавать и в виндах в обычном notepad-е, а потом скидывать на роутер. Несмотря на то, что в виндах строчки текстовых файлов заканчиваются 0Dh 0Ah, скрипт просто 0D игнорирует (а заодно пробелы и tab-ы). Так что всё будет ок.
сами скрипты:
dnrun
Code:
#!/bin/sh
[ "$(ps | grep "dnload" | grep "SCR")" != "" ] && exit
clear
echo "RUN: FTP/HTTP download client"
/opt/bin/screen -dmS dnload /opt/bin/dnload
просто запускает скрипт dnload в фоновом режиме. для запуска используйте именно его. запуск можно прописать сразу в post-mount
-----------
dnload
Code:
#!/bin/sh
sourcedir="/opt/source"
targetdir="/opt/download"
if [ ! -f $sourcedir/list ]; then echo "$sourcedir/list not found!"; exit; fi
filelist=$(cat $sourcedir/list | tr -d '\015\040\011')
for x in $filelist
do
rm -f $sourcedir/list.b
echo "---$x---"
wget -c -P $targetdir $x
errcode=$?
if [ "$errcode" -ne "0" ]
then
echo "ERROR - $x - [$errcode]" >> $targetdir/list.out
else
echo "$(date) - $x" >> $targetdir/list.out
fi
cnt=0
for y in $(cat $sourcedir/list)
do
if [ "$cnt" -ne "0" ]
then
echo $y >> $sourcedir/list.b
fi
cnt=1
done
[ -f $sourcedir/list.b ] && cp $sourcedir/list.b $sourcedir/list || rm -f $sourcedir/list
echo " "
done
основной скрипт.
делает следующее:
последовательно запускает wget для скачивания файлов (кому хочется - можете вместо wget пользовать axel или curl какой-нибудь)
имена папок тоже можно легко поменять, как кому удобно.
по завершении скачивания каждого файла, ссылка уничтожается из файла list чтобы в случае если процесс прервут или электричество отрубится, закачаные файлы второй раз заливаться не будут, а если загрузка прервалась на середине какого-либо файла, то закачка продолжится с места на котором оборвалась (конечно, если сервер поддерживает докачку, иначе прерванный файл будет заливаться сначала).
также по завершении закачки каждого файла информация об этом дописывается в файл list.out (он не перезаписывается, информация просто добавляется в конец), если загрузка прошла успешно, то пишется дата/время завершения и имя файла, если произошла ошибка при загрузке, то пишет ERROR, имя файла и код ошибки.
по завершении всех закачек исходный список (list) уничтожается.
-----------
dn
Code:
#!/bin/sh
screen -r dnload
вытаскивает из фона уже запущенный процесс, чтобы посмотреть как там у него дела. чтобы убрать обратно - Ctrl-A, D. Если надо закрыть - Ctrl+С
если у кого будут вопросы - пишите.
P.S.
впоследствии планирую прикрутить удобности, типа сортировки по каталогам, которые будут указываться в самом списке.
что-то типа этого:
Code:
==>music
http://www.*******.com/1.mp3
http://www.*******.com/2.mp3
==>video
http://www.*******.com/1.avi
ftp://ftp.********.ru/2.avi
а совсем в дальних планах сделать веб интерфейс (хотя может и не сделаю, как человеку выращенному на досе, мне более близки консольные приложения)