На Хабре наткнулся на интересную статью "Спасем крупнейшую медиатеку в рунете. Вся база rutracker у Вас на компьютере", где выложена торрент-ссылка на крупную базу хэш-сумм торрент-файлов.
Т.к. у меня нет регистрации там, то заметку оформлю здесь.
После загрузки около 2 Гб, на диске появился файл final.txt.gz, который содержит информацию о названии торрента, его ID, хэш-сумме и ещё несколько полей.
Этого достаточно для экспериментов.
Теперь в игру вступает мощь комадной строки линукса.
Посмотрим, что это за файл.
Для начала подсчитаем количество записей (строк, оканчивающихся символом \n).
$ cat final.txt | wc -l
1411636
Это почти 1,5 миллиона строк.
Файл final.txt в качестве разделителя полей использует табуляцию TAB (символ \t).
Отберём только нужное (название и хэш-сумму), используя команду cut:
$ cat final.txt | cut -f 2,6
Вывод можно направить и в другой файл:
$ cat final.txt | cut -f 2,6 > hashes.csv
Теперь можно выполнять поиск необходимого из командной строки:
Например найти всё PDF - файлы
$ cat final.txt | cut -f 2,6 | grep "PDF"
Теперь в найденном можно найти уже более подробно:
$ cat final.txt | cut -f 2,6 | grep "PDF" | grep "Android"
Для удобства преобразуем хэш-суммы, в т.н. magnet-ссылки.
Magnet-ссылка - это маленькое чудо.
Минимальная magnet-ссылка имеет вид: magnet:?xt=urn:btih:HASH
где вместо HASH подставляется хэш-сумма из файла final.txt
Используем AWK.
Параметр -F '\t' - задаёт разделитель (табуляцию) во входном файле, пишется в формате регулярных выражений, поэтому в одинарных ковычках.
Принцип AWK (помимо всех возможностей) - это отбор строк (записей) по шаблону (pattern) и применение к этому шаблону действия (action).
Шаблоны и действия записываются в виде программы на языке AWK.
В командной строке обычно используются короткие программы, текст которых помещается на строке, а то и двух. Программа заключается в одинарные кавычки.
Кратко переменные, относящиеся к текущей строке (линии):
$0 - вся строка
$1, $2 и т.п. - поля на которые разбивается вся строка (каждый раз каждая строка) внутри AWK
Программа записывается в виде:
'$1 ~ /Android/ {print $0}'
Здесь есть шаблон с регулярным выражением заключённым между двумя //, а также действие. Действие заключается в фигурные скобки {}.
Мы берём первое поле каждой строки - это параметр $1 (а в него попадёт название торрента, так мы решили на предыдущих этапах), и при срабатывании шаблона (мы ищем вхождение слова Android в тексте названия), выполниться действие { print $0 } - просто выведем на стандартный вывод (консоль).
Т.к. просто хэш-суммы не интересно, то сделаём домашнюю заготовку - добавим префикс magnet-ссылки к каждой хэш-сумме и получим файл вида: название торрента - magnet-ссылка. Заметим, что мы также добавляем разделитель табуляцию в выходном файле - \t перед magnet.
gimmor@red$ cat final.txt | grep "PDF" | cut -f 2,6 | awk -F '\t' '$1 ~ /Android/ {print $1,"\tmagnet:?xt=urn:btih:"$2}'
или с ранее отфильтрованным файлом:
gimmor@red$ cat hashes.csv | awk -F '\t' '$1 ~ /Android/ {print $1,"\tmagnet:?xt=urn:btih:"$2}'
Т.е. используя цепочку перенаправлений, можно фильтровать, с каждым разом сужая поиск и отбирая нужное.
| grep "PDF" |
| grep "PDF" | grep "RUS" |
| grep "PDF" | grep "RUS" | grep "Ubuntu" |
Т.е. после отбора нужного - только magnet-ссылок:
gimmor@red $cat hashes.csv | awk -F '\t' '$1 ~ /Android/ {print $1,"\tmagnet:?xt=urn:btih:"$2}' | cut -f 2
Вывод будет примерно таким (хэш-суммы показаны условные):
magnet:?xt=urn:btih:V7LRVHBXLMXZHG4123345DQ7ZECRNXFA
magnet:?xt=urn:btih:55ITF6OOHNHKO4O5P4KY7CXYQ335FCAK
magnet:?xt=urn:btih:JX5WYUMEAG4KMJ5EBJ123345SP4UZZPF4
magnet:?xt=urn:btih:WDDIG2CDI656FVTGGPHL2KH7PWCRZAKD
magnet:?xt=urn:btih:YFEPMNFQS6X123345WRM7RM3EUEPGTOH
magnet:?xt=urn:btih:ZEZJZ6DMPDFVJPUJ123345OI2AXZZUB3J
Теперь, получив узкий список magnet-ссылок того что нужно, можно выполнять загрузку необходимого.
gimmor@red$ sudo apt-get install transmission-cli
Трансмиссия в командной строке запускается так:
gimmor@red$ transmission-cli [options] <file|url|magnet>
-m - важная опция, включает открытие порта на роутере, посредством службы UPnP.
gimmor@red$ transmission-cli -m "magnet:?xt=urn:btih:YFEPMNFQS6XYDS3TF123345M3EUEPGTOH"
Желательно, чтобы графический клиент не был запущен, иначе возникает конфликт портов. Можно и перенастроить порты у графического клиента.
В графическом клиенте, надо в меню "Файл" - "Открыть URL..." указать magnet-ссылку и далее стандартно.
Если воспользоваться моей заметкой по PostrgreSQL, то можно установить СУБД и загрузить туда полученный csv-файл, всю базу final.txt и пр.
И тогда выполнение sql запросов будет интерактивно + можно много чего ещё делать.
- Спасем крупнейшую медиатеку в рунете. Вся база rutracker у Вас на компьютере. http://habrahabr.ru/post/195454/
- Содержимое The Pirate Bay уместили в 90 мегабайт. http://habrahabr.ru/post/137929/
Т.к. у меня нет регистрации там, то заметку оформлю здесь.
После загрузки около 2 Гб, на диске появился файл final.txt.gz, который содержит информацию о названии торрента, его ID, хэш-сумме и ещё несколько полей.
Этого достаточно для экспериментов.
Теперь в игру вступает мощь комадной строки линукса.
Посмотрим, что это за файл.
Для начала подсчитаем количество записей (строк, оканчивающихся символом \n).
$ cat final.txt | wc -l
1411636
Это почти 1,5 миллиона строк.
Файл final.txt в качестве разделителя полей использует табуляцию TAB (символ \t).
Отберём только нужное (название и хэш-сумму), используя команду cut:
$ cat final.txt | cut -f 2,6
Вывод можно направить и в другой файл:
$ cat final.txt | cut -f 2,6 > hashes.csv
Теперь можно выполнять поиск необходимого из командной строки:
Например найти всё PDF - файлы
$ cat final.txt | cut -f 2,6 | grep "PDF"
Теперь в найденном можно найти уже более подробно:
$ cat final.txt | cut -f 2,6 | grep "PDF" | grep "Android"
Для удобства преобразуем хэш-суммы, в т.н. magnet-ссылки.
Magnet-ссылка - это маленькое чудо.
Минимальная magnet-ссылка имеет вид: magnet:?xt=urn:btih:HASH
где вместо HASH подставляется хэш-сумма из файла final.txt
Используем AWK.
Параметр -F '\t' - задаёт разделитель (табуляцию) во входном файле, пишется в формате регулярных выражений, поэтому в одинарных ковычках.
Принцип AWK (помимо всех возможностей) - это отбор строк (записей) по шаблону (pattern) и применение к этому шаблону действия (action).
Шаблоны и действия записываются в виде программы на языке AWK.
В командной строке обычно используются короткие программы, текст которых помещается на строке, а то и двух. Программа заключается в одинарные кавычки.
Кратко переменные, относящиеся к текущей строке (линии):
$0 - вся строка
$1, $2 и т.п. - поля на которые разбивается вся строка (каждый раз каждая строка) внутри AWK
Программа записывается в виде:
'$1 ~ /Android/ {print $0}'
Здесь есть шаблон с регулярным выражением заключённым между двумя //, а также действие. Действие заключается в фигурные скобки {}.
Мы берём первое поле каждой строки - это параметр $1 (а в него попадёт название торрента, так мы решили на предыдущих этапах), и при срабатывании шаблона (мы ищем вхождение слова Android в тексте названия), выполниться действие { print $0 } - просто выведем на стандартный вывод (консоль).
Т.к. просто хэш-суммы не интересно, то сделаём домашнюю заготовку - добавим префикс magnet-ссылки к каждой хэш-сумме и получим файл вида: название торрента - magnet-ссылка. Заметим, что мы также добавляем разделитель табуляцию в выходном файле - \t перед magnet.
gimmor@red$ cat final.txt | grep "PDF" | cut -f 2,6 | awk -F '\t' '$1 ~ /Android/ {print $1,"\tmagnet:?xt=urn:btih:"$2}'
или с ранее отфильтрованным файлом:
gimmor@red$ cat hashes.csv | awk -F '\t' '$1 ~ /Android/ {print $1,"\tmagnet:?xt=urn:btih:"$2}'
Т.е. используя цепочку перенаправлений, можно фильтровать, с каждым разом сужая поиск и отбирая нужное.
| grep "PDF" |
| grep "PDF" | grep "RUS" |
| grep "PDF" | grep "RUS" | grep "Ubuntu" |
Т.е. после отбора нужного - только magnet-ссылок:
gimmor@red $cat hashes.csv | awk -F '\t' '$1 ~ /Android/ {print $1,"\tmagnet:?xt=urn:btih:"$2}' | cut -f 2
Вывод будет примерно таким (хэш-суммы показаны условные):
magnet:?xt=urn:btih:V7LRVHBXLMXZHG4123345DQ7ZECRNXFA
magnet:?xt=urn:btih:55ITF6OOHNHKO4O5P4KY7CXYQ335FCAK
magnet:?xt=urn:btih:JX5WYUMEAG4KMJ5EBJ123345SP4UZZPF4
magnet:?xt=urn:btih:WDDIG2CDI656FVTGGPHL2KH7PWCRZAKD
magnet:?xt=urn:btih:YFEPMNFQS6X123345WRM7RM3EUEPGTOH
magnet:?xt=urn:btih:ZEZJZ6DMPDFVJPUJ123345OI2AXZZUB3J
Теперь, получив узкий список magnet-ссылок того что нужно, можно выполнять загрузку необходимого.
gimmor@red$ sudo apt-get install transmission-cli
Трансмиссия в командной строке запускается так:
gimmor@red$ transmission-cli [options] <file|url|magnet>
-m - важная опция, включает открытие порта на роутере, посредством службы UPnP.
gimmor@red$ transmission-cli -m "magnet:?xt=urn:btih:YFEPMNFQS6XYDS3TF123345M3EUEPGTOH"
Желательно, чтобы графический клиент не был запущен, иначе возникает конфликт портов. Можно и перенастроить порты у графического клиента.
В графическом клиенте, надо в меню "Файл" - "Открыть URL..." указать magnet-ссылку и далее стандартно.
※※※
Использование SQL
Если воспользоваться моей заметкой по PostrgreSQL, то можно установить СУБД и загрузить туда полученный csv-файл, всю базу final.txt и пр.
И тогда выполнение sql запросов будет интерактивно + можно много чего ещё делать.
※※※
Ресурсы
- Спасем крупнейшую медиатеку в рунете. Вся база rutracker у Вас на компьютере. http://habrahabr.ru/post/195454/
- Содержимое The Pirate Bay уместили в 90 мегабайт. http://habrahabr.ru/post/137929/
※※※
Комментариев нет:
Отправить комментарий