LinuxForum.Fans
Тема

Выбрать ссылки на файлы из html

Автор: Linux-GEEK 16 сообщений 2255 просмотров
18.02.2017 19:00 #420530

Я в bash пока не силён и знаю только простейший синтаксис if, fi, case и прочее. Мне нужно написать программу которая будет делать следующее.
1) Взять исходник этой html страницы http://mirror.yandex.ru/archlinux/core/os/x86_64/
2) Должна создать новый файл > output.
3) писать в файл output строчку ¨http://mirror.yandex.ru/archlinux/core/os/x86_64/¨
4) Брать названия которые в двойных ковычках с форматом .sig и .tar.xz, и дополнять файл output именем файла.
5) Переходить к третьему шагу до тех пор пока не вынет все ссылки из текста.
6) Всё это должно быть написано на языке bash.
Кто поможет тому плюс в репутацию!

18.02.2017 19:29 #420535
text
wget -c -r -nH --cut-dirs=5 ftp://mirror.yandex.ru/archlinux/core/os/x86_64/

Какова конечная цель? Команда выше загрузит в текущий каталог все содержимое каталога /archlinux/core/os/x86_64/ c FTP-сервера Яндекса. При этом все составляющие путей к файлам будут отброшены.
И да, "программой" сценарий оболочки назвать язык не поворачивается :)

19.02.2017 00:55 #420546
"yars" написал:
Какова конечная цель?

Мне нужно все эти пакеты выкачать чтобы arch linux поставить.

"yars" написал:
wget -c -r -nH --cut-dirs=5 [url]ftp://mirror.yandex.ru/archlinux/core/os/x86_64/[/url]

Будет отлично если эта команда будет с андроида работать.

"yars" написал:
программой

Я читал книгу а там мужик назвал написание скриптов bash настоящим програмированием :-X

19.02.2017 08:57 · отредактировано #420563

curl - для просмотра страницы в внутри.
grep с ключиком -oE в помощь.
Для андроида 5.0 и выше есть пакет termux в котором можно установить все нужные программы через apt.

19.02.2017 13:11 #420572
"Linux-GEEK" написал:
Будет отлично если эта команда будет с андроида работать.

I'm googled it for you.

19.02.2017 13:52 · отредактировано #420578
yars написал:

Хм, у меня не пошёл этот бинарник...
На каком андроида работает?
У меня пока самый лучший вариант это в termux установить пакет wget, войти выйти, что бы использовался от пакета а не busybox.

19.02.2017 14:43 #420588

Кстати задача криво написана. Не пойму что надо сделать.

19.02.2017 14:54 #420589

XliN, Перевожу: Спарсить все ссылки на файлы со страницы))
ЗЫ
Весьма неплохо решается одной строчкой прямо в ком строке
[console]curl http://mirror.yandex.ru/archlinux/core/os/x86_64/ | grep '<a href' | sed 's/<a href="/http:\/\/mirror.yandex.ru\/archlinux\/core\/os\/x86_64\//g'| sed 's/">.*//g' |grep -v "\.\."> output[/console]

А чтобы сразу все и скачать:
[console]wget $(curl http://mirror.yandex.ru/archlinux/core/os/x86_64/ | grep '<a href' | sed 's/<a href="/http:\/\/mirror.yandex.ru\/archlinux\/core\/os\/x86_64\//g'| sed 's/">.*//g' |grep -v "\.\.")[/console]

19.02.2017 14:54 #420590
"ormorph" написал:
На каком андроида работает?

Не могу сказать:

text
Downloads/wget-binary: ELF 32-bit LSB executable, ARM, EABI4 version 1 (SYSV), dynamically linked, interpreter /system/bin/linker, not stripped
19.02.2017 16:42 #420595
"Linux-GEEK" написал:
Мне нужно

Это радует! Дерзайте.

"DiabloPC" написал:
чтобы сразу

man wget - великая сила!

"ormorph" написал:
termux

Это тайна! Нельзя же всем! :D

19.02.2017 16:49 #420598
DiabloPC написал:
XliN, Перевожу: Спарсить все ссылки на файлы со страницы))
ЗЫ
Весьма неплохо решается одной строчкой прямо в ком строке
[console]curl http://mirror.yandex.ru/archlinux/core/os/x86_64/ | grep '<a href' | sed 's/<a href="/http:\/\/mirror.yandex.ru\/archlinux\/core\/os\/x86_64\//g'| sed 's/">.*//g' > output[/console]

А чтобы сразу все и скачать:
[console]wget $(curl http://mirror.yandex.ru/archlinux/core/os/x86_64/ | grep '<a href' | sed 's/<a href="/http:\/\/mirror.yandex.ru\/archlinux\/core\/os\/x86_64\//g'| sed 's/">.*//g' )[/console]

Мой вариант:
[console]$ curl http://mirror.yandex.ru/archlinux/core/os/x86_64/|grep href|grep -oE '"[[:print:]]+"'|sed 's/"//g'|awk '{print "http://mirror.yandex.ru/archlinux/core/os/x86_64/"$1}'|grep -v "\.\."[/console]
Может немного длиннее зато набирать легче, без всяких обратных слэшей.
Последний элемент элемент конвейера не мешало бы добавить и вам, а то ссылка на ../ не очень кошерно.

19.02.2017 16:59 #420602
stranger написал:
[quote="ormorph"]termux

Это тайна! Нельзя же всем! :D[/quote]
Ну вот, теперь не выйдет из меня разведчика...

19.02.2017 16:59 #420603

"ormorph" написал:
а то ссылка на ../ не очень кошерно.
CыПыСы, я про нее напрочь забыл)

"ormorph" написал:
Может немного длиннее зато набирать легче
Да собственно и не длинее, просто я никак не приучусь к grep'y в связке с регэкспами, как-то привык sed юзать, так привычки и не меняю
19.02.2017 17:14 #420607
DiabloPC написал:
Да собственно и не длинее, просто я никак не приучусь к grep'y в связке с регэкспами, как-то привык sed юзать, так привычки и не меняю

Ну тут все довольно просто для понимания, главное по регулярным выражениям почитать тыц
Использование grep в скриптах позволяет ещё немного оптимизировать за счёт того, что если срока присутствует заданным параметром, то возвращает 0, в противном случае 1. Можно одновременно выполнять проверку на наличие строк.

19.02.2017 22:50 #420623
"XliN" написал:
Кстати задача криво написана. Не пойму что надо сделать.

Тут уже все давно поняли

"ormorph" написал:
Для андроида 5.0 и выше

Дерьмо этот андроид 5! Kit-Kat поставил обратно и радуюсь.

"ormorph" написал:
curl http://mirror.yandex.ru/archlinux/core/os/x86_64/|grep href|grep -oE '"[[:print:]]+"'|sed 's/"//g'|awk '{print "http://mirror.yandex.ru/archlinux/core/os/x86_64/"$1}'|grep -v "\.\."

Вот рабочий наконец-то скрипт! Держи лайк

Войдите или зарегистрируйтесь, чтобы ответить.