Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
<source lang="язык"></source>. Я верю, что у вас не все так плохо с форматированием :)#!/bin/bash
#!/bin/sh -ef — это будет работать быстрее и предсказуемее, чем bash. Опция "-e" нужна для того, чтобы падать при ошибке, а не продолжать дальнейшее выполнение при явно порушенных состояниях и структурах данных. Опция "-f" нужна для того, чтобы не тратить время на глоббинг и не нарваться на то, что название файла со "*", "?" или "[]" внезапно поведет себя совсем не так, как вы думали.IFS="\n"
lastmod=( $( grep Last-Modified response.out ) )
unset IFS
lastmod="$(grep Last-Modified response.out)"
# Очистка файла для новой записи
echo "" > response.out
echo -n >response.out
echo
wget -N http://www.lostfilm.tv/rssdd.xml
cat ../rssdd.xml | grep -io 'http.*torrent' | egrep -i "$movies" | egrep "$quality" | while read link; do
# обрабатываем ссылку
done
# Фильтр сериалов
movies='House.M.D|IT.Crowd|Persons.Unknown|Legend.of.the.Seeker|Leverage|Warehouse.13|Futurama'
# Фильтр качества
quality='\.720p\.\|\.HD\.\|Persons.Unknown|Legend.of.the.Seeker|IT.Crowd'
\., но вы это и так знаете, судя по первым 2 значениям.link=${link/&аmp;/&}
name=${link#*&}
./$name, гораздо лучше написать "$name" — а вообще, на практике, это такая довольно опасная операция, в зависимости от степени интерактивности скрипта уж лучше либо «cp -i» использоваться, либо сделать хоть какую-то обработку ошибок.Вам абсолютно не нужен bash в этом скрипте — пишите лучше #!/bin/sh -ef — это будет работать быстрее и предсказуемее, чем bash.Почему будет работать быстрее? Разве в современных система sh не линк на bash?
cat ../rssdd.xml | grep -io 'http.*torrent'
grep 'http.*torrent' ../rssdd.xml</source.bash 10000 0m19.689s
dash 10000 0m8.577s
пишите лучше #!/bin/sh -ef
wget -N www.lostfilm.tv/rssdd.xml
cat ../rssdd.xml | grep -io 'http.*torrent' | egrep -i "$movies" | egrep "$quality" | while read link; do
# обрабатываем ссылку
done
declare -a имя, и, по большому счету, они нужны совершенно не для таких задач.LAST_MD5=$(md5sum rssdd.xml)
wget ...
if [ "$LAST_MD5" != "$(md5sum rssdd.xml)" ]; then
парсить файл
fi
(Так как парсер сьедает &аmp;, буква а здесь и далее по тексту была заменена на русскую. При копировании заменить!)Парсер ничего не съедает. Пишите просто &amp;, это же HTML обычный.
movies содержит список скачиваемых сериалов. Но на Лостфильме они обычно выходят в двух версиях качества, а я лично стараюсь качать все в высоком качестве. Значит нужен дополнительный фильтр — quality. Но не все сериалы выходили в 720p или HD, поэтому добавим их в конец фильтра что-бы они могли тоже пройти проверку на качество!
xmlstarlet sel -T -t -m /rss/channel/item/link -c . -n rssdd.xmlhttp://lostfilm.tv/download.php?id=3597&Sons.of.Anarchy.S03E06.HD.rus.LostFilm.TV.mkv.torrent http://lostfilm.tv/download.php?id=3596&Sons.of.Anarchy.S03E06.rus.LostFilm.TV.avi.torrent http://lostfilm.tv/download.php?id=3595&Eureka.s04e18.rus.720p.LostFilm.TV.mkv.torrent http://lostfilm.tv/download.php?id=3594&Eureka.s04e18.rus.LostFilm.TV.avi.torrent ...
curl http://www.lostfilm.tv/rssdd.xml | xmllint --xpath '/rss/channel/item/link/text()' -#!/bin/sh
xmlstarlet sel -T -t -m "$1" -v . -n "$2"
http://lostfilm.tv/download.php?id=3597&Sons.of.Anarchy.S03E06.HD.rus.LostFilm.TV.mkv.torrent http://lostfilm.tv/download.php?id=3596&Sons.of.Anarchy.S03E06.rus.LostFilm.TV.avi.torrent… — здесь все остальное, что было выше
http://lostfilm.tv/download.php?id=3589&Haven.s01e09.rus.720p.LostFilm.TV.mkv.torrent http://lostfilm.tv/download.php?id=3588&Haven.s01e09.rus.LostFilm.TV.avi.torrent http://lostfilm.tv/download.php?id=3583&Haven.s01e08.rus.720p.LostFilm.TV.mkv.torrent
Парсер RSS на bash для Лостфильма: щадящий режим для RSS сервера, проверка скачанного