Script na parsovani souboru kvuli internetovym adresam? - Vyreseno!

Matous Jan Fialka fialka.linux na seznam.cz
Sobota Duben 19 20:26:30 CEST 2003


Dobry den,

cely problem se podarilo nakonec vyresil takto, pricemz je potreba nekolika
scriptu (vsechny jsou umisteny v adresari /usr/local/bin/).

Na pozadi bezi neustale script (extract-urls.sh), ktery mi laskave napsal
pan <Z.Burda na sh.cvut.cz> (dekuji) pricemz jest zajisteno, aby se v systemu
nespustil dvakrat, a to timto scriptem:

----- extract-urls -----
#!/bin/sh
com="/usr/local/bin/extract-urls.sh"
grp=`/bin/ps -ax | egrep "$com" | egrep -v "grep -E"`
if [ "$grp" ]; then :
else
    $com &
fi
-----


Hlavni script, ktery bezi na pozadi:

----- extract-urls.sh -----
#!/bin/sh

TEMP=/home/uzivatel/.procmail/tmp/
MDIR=/home/uzivatel/mail/
ADRS=world-wide-web

trap "rm -r -f $TEMP/pipe-urls.tmp $TEMP/urls-tmp-$$; exit 1" INT
trap "rm -r -f $TEMP/pipe-urls.tmp $TEMP/urls-tmp-$$; exit 1" HUP
trap "rm -r -f $TEMP/pipe-urls.tmp $TEMP/urls-tmp-$$; exit 1" QUIT
trap "rm -r -f $TEMP/pipe-urls.tmp $TEMP/urls-tmp-$$; exit 1" ABRT
trap "rm -r -f $TEMP/pipe-urls.tmp $TEMP/urls-tmp-$$; exit 1" TERM

/usr/bin/mkfifo $TEMP/pipe-urls.tmp

while :; do cat $TEMP/pipe-urls.tmp | egrep -oh
"(((https?|ftp|gopher)://|(file|news):)[^' <>\"]+|(www).[-a-z0-9.]+)[^'
.,;<>\":]" | sort | uniq >> $TEMP/urls-t

# Trosku se mi to rozpadlo, protoze mi to muj MUA zarovnal, ale snad je to
# jasne, kdyby to nekdo chtel, staci, kdyz ty 3 radky nad timto komentarem
# srovna do jednoho dlouheho radku...

  cat $MDIR/$ADRS >> $TEMP/urls-tmp-$$
  cat $TEMP/urls-tmp-$$ | sort | uniq > $MDIR/$ADRS
  rm -r -f $TEMP/urls-tmp-$$

done
-----


Dale mam v ~/.procmailrc uzivatele toto jednoduche pravidlo:

----- vyrez z ~/.procmailrc -----
:0 c:
$PMDIR/tmp/pipe-urls.tmp
-----


A jak to cele funguje?

Cron uzivatele kazdych N minut stahuje postu tak, ze vola script:

----- cron.fetchmail -----
/usr/local/bin/extract-urls
/usr/bin/fetchmail
-----

podle tohoto cron pravidla:

----- obsah crontab -e -----
1 0-59/3 * * * * /usr/local/bin/cron.fetchmail
2
-----

a vsechny internetove adresy, ktere se vyskytuji v prichozi poste se
ukladaji do mailboxu:

/home/user/mail/world-wide-web ,

coz je presne to, ceho jsem potreboval docilit. Dekuji vsem, kteri se na
reseni podileli.


Preji prijemny den.

-- 
Matous Jan Fialka     Variable computing Prague
-----------------------------------------------
Varcomp E-Mail: director.varcomp.prague na post.cz
Private E-Mail:     matous_jan.fialka na seznam.cz
Linux E-Mail:            fialka.linux na seznam.cz
GSM Number:                      +420 737711974
ICQ Number:           305749556 CET 22:00-01:00
-----------------------------------------------
Linux User Number: 308523       Peace and Linux
-----------------------------------------------


Další informace o konferenci Linux