Написал скрипт на bash )) Данный скрипт предназначен для работы с базами адресов электронной почты. Он состоит из нескольких утилит: генерация баз, сортировка, "выдергивание" адресов из файлов, cклеивание баз, разделение баз, вставка контрольного адреса. Для изменения консольного интерфейса на графический, раскомментируйте строку #"DIALOG=Xdialog" и закомментируйте строку "DIALOG=dialog". =========== Скачать скрипт можно с http://slil.ru/24381785 =========== В процессе отладки и доводки, собрал базу адресов. Валидность не проверял. Но думаю, что больше 0% )) В базе около 1 млн. адресов. Скачать: http://slil.ru/24381712 =========== Выслушаю пожелания о функциях. Хотелось бы узнать, стоит прикручивать wget + graber или нет. И как можно присобачить к этой ботве проверку на валид.
Чтоб не париться со slil.ru (то качает, то не качает), выкладываю здесь. Code: #!/bin/sh # Copyright (C) 2007 Un_0 <[email protected]> # #=========================================================================================================== #DIALOG=Xdialog DIALOG=dialog #=========================================================================================================== TITLE="SpamTools" MENU=""Select" 0 60 0 "1" "Graber" "2" "Sort" "3" "Generator" "4" "Join" "5" "Include" "6" "Split"" # #=========================================================================================================== # error() { echo "$1" exit 2 } help() { cat <<HELP ################################################################################### # Данный скрипт предназначен для работы с базами адресов электронной почты. # # Он состоит из нескольких утилит: генерация баз, сортировка, "выдергивание" # # адресов из файлов, cклеивание баз, разделение баз, вставка контрольного адреса. # # # # Для изменения консольного интерфейса на графический, раскомментируйте строку # # "DIALOG=Xdialog" и закомментируйте строку "DIALOG=dialog". # ################################################################################### HELP exit 0 } # #=========================================================================================================== # #опции командной строки while [ -n "$1" ]; do case $1 in -h) help;shift 1;; --help) help;shift 1;; --) shift;break;; -*) echo "error: no such option $1. -h for help";exit 1;; *) break;; esac done # #=========================================================================================================== # $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title $TITLE --menu $MENU 2> /tmp/sel.$$ rval=$? clear if [ "$rval" = "0" ]; then sel=`cat /tmp/sel.$$` rm -f /tmp/sel.$$ # #=========================================================================================================== # if [ "$sel" = "1" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Graber" \ --inputbox "File (/base.txt):" 0 0 2> /tmp/inputbox.tmp.$$ retval=$? if [ "$retval" = "0" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Graber" \ --inputbox "Output (/mails.txt):" 0 0 2> /tmp/outbox.tmp.$$ retval=$? if [ "$retval" = "0" ]; then output=`cat /tmp/outbox.tmp.$$` rm -f /tmp/outbox.tmp.$$ input=`cat /tmp/inputbox.tmp.$$` rm -f /tmp/inputbox.tmp.$$ grep -E -o -h '[-._a-zA-Z0-9]+@[-_.a-zA-Z0-9]+\.[a-zA-Z]{2,4}' $input | sort | uniq | tr A-Z a-z >>$output { n=`grep -i . $output | wc -l`; $DIALOG --backtitle "SpamTools by Un_0 v0.3" --msgbox "Found $n mails" 5 28 ; } rm -f /tmp/num.$$ fi fi #=========================================================================================================== else if [ "$sel" = "2" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Sort" \ --inputbox "Input (mails.txt):" 0 0 2> /tmp/inputbox.tmp.$$ retval=$? if [ "$retval" = "0" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Sort" \ --inputbox "Output (/sort.txt):" 0 0 2> /tmp/outbox.tmp.$$ retval=$? if [ "$retval" = "0" ]; then output=`cat /tmp/outbox.tmp.$$` rm -f /tmp/outbox.tmp.$$ input=`cat /tmp/inputbox.tmp.$$` rm -f /tmp/inputbox.tmp.$$ cat $input | sort | uniq | tr A-Z a-z >>$output { n=`grep -i . $output | wc -l`; $DIALOG --backtitle "SpamTools by Un_0 v0.3" --msgbox "Parsed $n lines" 5 28 ; } fi fi #=========================================================================================================== else if [ "$sel" = "3" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Generator" \ --inputbox "Input (/names.txt):" 0 0 2> /tmp/inputbox.tmp.$$ retval=$? if [ "$retval" = "0" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Generator" \ --inputbox "Domain (mail.ru):" 0 0 2> /tmp/domain.tmp.$$ retval=$? if [ "$retval" = "0" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Generator" \ --inputbox "Output (/Gen.txt):" 0 0 2> /tmp/outbox.tmp.$$ retval=$? if [ "$retval" = "0" ]; then domain=`cat /tmp/domain.tmp.$$` rm -f /tmp/domain.tmp.$$ input=`cat /tmp/inputbox.tmp.$$` rm -f /tmp/inputbox.tmp.$$ output=`cat /tmp/outbox.tmp.$$` rm -f /tmp/outbox.tmp.$$ while read -r xx yy do printf "%s%s\n" "$yy" "$xx"@$domain >> $output done < $input { n=`grep -i . $output | wc -l`; $DIALOG --backtitle "SpamTools by Un_0 v0.3" --msgbox "Create $n mails" 5 28 ; } fi fi fi #=========================================================================================================== else if [ "$sel" = "4" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Join" \ --inputbox "Input files (/*.txt):" 0 0 2> /tmp/inputbox.tmp.$$ retval=$? if [ "$retval" = "0" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Join" \ --inputbox "Output (/mails.txt):" 0 0 2> /tmp/outbox.tmp.$$ retval=$? if [ "$retval" = "0" ]; then output=`cat /tmp/outbox.tmp.$$` rm -f /tmp/outbox.tmp.$$ input=`cat /tmp/inputbox.tmp.$$` rm -f /tmp/inputbox.tmp.$$ less $input | sort | tr A-Z a-z | uniq >> $output { n=`grep -i . $output | wc -l`; $DIALOG --backtitle "SpamTools by Un_0 v0.3" --msgbox "Found $n lines" 5 28 ; } fi fi #=========================================================================================================== else if [ "$sel" = "5" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Include" \ --inputbox "Input (/mails.txt):" 0 0 2> /tmp/inputbox.tmp.$$ retval=$? if [ "$retval" = "0" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Include" \ --inputbox "Mail ([email protected]):" 0 0 2> /tmp/mail.tmp.$$ retval=$? if [ "$retval" = "0" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Include" \ --inputbox "Lines (10000):" 0 0 2> /tmp/spin.tmp.$$ retval=$? if [ "$retval" = "0" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Include" \ --inputbox "Output (/include.txt):" 0 0 2> /tmp/outbox.tmp.$$ mail=`cat /tmp/mail.tmp.$$` rm -f /tmp/mail.tmp.$$ input=`cat /tmp/inputbox.tmp.$$` rm -f /tmp/inputbox.tmp.$$ output=`cat /tmp/outbox.tmp.$$` rm -f /tmp/outbox.tmp.$$ spin=`cat /tmp/spin.tmp.$$` rm -f /tmp/spin.tmp.$$ n=0 q=0 while read -r xx yy do printf "%s%s\n" "$yy" "$xx" >> $output n=`expr $n + 1` if [ "$n" = "$spin" ]; then echo $mail >> $output n=0 q=`expr $q + 1` fi done < $input { $DIALOG --backtitle "SpamTools by Un_0 v0.3" --msgbox "Include $q mails" 5 28 ; } fi fi fi #=========================================================================================================== else if [ "$sel" = "6" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Split" \ --inputbox "Input (/mails.txt):" 0 0 2> /tmp/inputbox.tmp.$$ retval=$? if [ "$retval" = "0" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Split" \ --inputbox "Lines (10000):" 0 0 2> /tmp/spin.tmp.$$ retval=$? if [ "$retval" = "0" ]; then $DIALOG --backtitle "SpamTools by Un_0 v0.3" --title "Split" \ --inputbox "Output dir (/home/):" 0 0 2> /tmp/outbox.tmp.$$ retval=$? if [ "$retval" = "0" ]; then input=`cat /tmp/inputbox.tmp.$$` rm -f /tmp/inputbox.tmp.$$ output=`cat /tmp/outbox.tmp.$$` rm -f /tmp/outbox.tmp.$$ spin=`cat /tmp/spin.tmp.$$` rm -f /tmp/spin.tmp.$$ n=0 k=1 while read -r xx yy do printf "%s%s\n" "$yy" "$xx"@$domain >> "$output""split_"$k n=`expr $n + 1` if [ "$n" = "$spin" ]; then k=`expr $k + 1` n=0 fi done < $input { k=`expr $k - 1` ; $DIALOG --backtitle "SpamTools by Un_0 v0.3" --msgbox "Create $k files" 5 28 ; } fi fi fi fi #=========================================================================================================== fi fi fi fi fi fi #=========================================================================================================== clear #===========================================================================================================