№ 8262 В разделе
Sysadmin
от January 20th, 2017,
В подшивках: Bash, Linux, Python
Понадобится python3, urllib3, bash, aria2c (потому, что может в несколько потоков качать) и curl.
Сначала нужно научиться получать список файлов для скачивания. Это не сложно. Я просто получил файл по урлу, выделил из него все ссылки и взял только те, что ссылаются в нужное место. Ничего сложного.
from html.parser import HTMLParser import urllib3 links = [] http = urllib3.PoolManager() pagedata = http.request('GET', 'http://dbeaver.jkiss.org/download/') class MyHTMLParser(HTMLParser): def handle_starttag(self, tag, attrs): if tag != 'a': return attr = dict(attrs) links.append(attr) parser = MyHTMLParser() parser.feed(str(pagedata.data)) for link in links: if ('href' in link): if ('/files/dbeaver-ce' in link['href']): print('http://dbeaver.jkiss.org'+link['href'])
Скрипт выведет список ссылок на файлы типа
# python3 mm_dbeaver.py http://dbeaver.jkiss.org/files/dbeaver-ce-latest-x86-setup.exe ...
Дальше еще проще! Пишем скрипт на bash, который получит страницу с ссылками и сравнит с тем, что было скачано ранее. Если появились изменения, то нужно удалить старые файлы (если требуется), получить список новых файлов и скачать их все. А в конце старый файл страницы заменяем новым.
#!/bin/bash cd "$(dirname "$0")" outdir="/mnt/office/distr/DBMS and Tools/DBEAVER" touch page.last curl -s http://dbeaver.jkiss.org/download/ > page.current md5last=$(md5sum page.last|awk '{print $1}') md5current=$(md5sum page.current|awk '{print $1}') echo $md5last $md5current if [ "$md5current" == "$md5last" ]; then echo "Equal" else echo "Not equal. Update needed." echo "Cleaning $outdir/*" rm -rf "$outdir" for i in $(python3 ./mm_dbeaver.py) ; do aria2c -d "$outdir" "$i" done cp page.current page.last fi
Собственно все. Кладете симлинк в /etc/cron.daily и забываете.
Fortune cookie: vagina, n.: The box a penis comes in.
Leave a Reply