hmikux
25-01-2011, 21:38
Hallo Leute,
ich brauche noch etwas Hilfe um mein shell-script fertigzustellen. Der Anfang ist gemacht, nur fehlt mir nötiges Wissen um den Hauptteil zu realisieren.
Folgendes ist die Aufgabe:
Ich kann per rss-feed checken, ob neue files zum download bereitstehen. Wenn dies der Fall ist, möchte ich dies tun. Wenn das file jedoch von mir bereits runtergeladen wurde, soll das script das file nicht ein zweites mal runterladen.
Das was ich bisher vom script geschrieben habe, möchte ich mal in einzelnen Sektionen beschreiben:
Section1: Download des rssfeeds und Ausgabe umleiten in xml-file.
Section2: Pruefen ob neue files vorhanden sind. Die URLs der files findet man als Information im xml-file. Folgendermassen gekennzeichnet: <guid>URL-link</guid>
Wenn links im xml-file als URL gefunden werden, sollen diese in ein separates File gespeichert werden - jedoch so modifiziert, das ich dies an wget übergeben kann.
Section3: Wenn nun NEUE URLs gefunden werden sollen diese per wget lokal runtergeladen werden. Nach erfolgreichem downlaod, soll ein log mit timestamp in /mnt/xxxx/download.log inkl. URL geschrieben werden.
Section4: clean-up
#!/bin/sh
# section1
wget "http://xxxx/hq" -O /mnt/xxxx/rssfeed_all.xml
sleep 1
# section2
grep 'guid' /mnt/xxxx/rssfeed_all.xml &> /dev/null
if [ "$?" != "0" ]; then
echo $(date) "- No new files to download..." >> /mnt/xxxx/download.log
else
grep 'guid' /mnt/xxxx/rssfeed_all.xml \
| sed -n -e 's! <guid>!!gp' | sed -n -e 's!</guid>!!gp' \
>> /mnt/xxxx/rssfeed_urls.txt
fi
#section3
????? DAS BRAUCHE ICH NOCH ;) ?????
# section4
rm -f /mnt/xxxx/rssfeed_all.xml
rm -f /mnt/xxxx/rssfeed_urls.txt
echo; echo 'All temporary files deleted...done'
exit 0
Section3-Problematik:
Es koennte durchaus sein, das mehrere URLs im xml-file vorhanden sind. Diese muesste ich als Liste an grep (zur Pruefung) uebergen, zum checken, ob diese vielleicht schon runtergeladen wurden. Wenn JA, dann findet man diesbezueglich bereits einen LOG-Eintrag. Wenn NEIN, muss die URL aus der Liste an wget uebergeben werden, um diese runterzuladen und dann nach erfolgreichen download einen neuen LOGeintrag in das file 'download.log' anhaengen.
Ich muss wahrscheinlich aus 'rssfeed_urls.txt' eine Liste erzeugen. Den Inhalt (line per line) per grep verifizieren, ob vielleicht im download.log schon etwas vorhanden ist. Wenn ja, dann keine Aktion (für diese spezielle URL, weiter mit der nächsten line). Wenn NEIN, dann Uebergabe an wget und im Anschluss einen neuen LOG-Eintrag inkl. timestamp.
Es kann durchaus sein, das mal nur ein file bereitsteht (also als Resultat eine line aus section2) oder auch mehrere, das bedeutet mehrere lines als Resultat aus section2.
Könnt ihr mir diesbezüglich etwas helfen. Vielen Dank.
hmikux
ich brauche noch etwas Hilfe um mein shell-script fertigzustellen. Der Anfang ist gemacht, nur fehlt mir nötiges Wissen um den Hauptteil zu realisieren.
Folgendes ist die Aufgabe:
Ich kann per rss-feed checken, ob neue files zum download bereitstehen. Wenn dies der Fall ist, möchte ich dies tun. Wenn das file jedoch von mir bereits runtergeladen wurde, soll das script das file nicht ein zweites mal runterladen.
Das was ich bisher vom script geschrieben habe, möchte ich mal in einzelnen Sektionen beschreiben:
Section1: Download des rssfeeds und Ausgabe umleiten in xml-file.
Section2: Pruefen ob neue files vorhanden sind. Die URLs der files findet man als Information im xml-file. Folgendermassen gekennzeichnet: <guid>URL-link</guid>
Wenn links im xml-file als URL gefunden werden, sollen diese in ein separates File gespeichert werden - jedoch so modifiziert, das ich dies an wget übergeben kann.
Section3: Wenn nun NEUE URLs gefunden werden sollen diese per wget lokal runtergeladen werden. Nach erfolgreichem downlaod, soll ein log mit timestamp in /mnt/xxxx/download.log inkl. URL geschrieben werden.
Section4: clean-up
#!/bin/sh
# section1
wget "http://xxxx/hq" -O /mnt/xxxx/rssfeed_all.xml
sleep 1
# section2
grep 'guid' /mnt/xxxx/rssfeed_all.xml &> /dev/null
if [ "$?" != "0" ]; then
echo $(date) "- No new files to download..." >> /mnt/xxxx/download.log
else
grep 'guid' /mnt/xxxx/rssfeed_all.xml \
| sed -n -e 's! <guid>!!gp' | sed -n -e 's!</guid>!!gp' \
>> /mnt/xxxx/rssfeed_urls.txt
fi
#section3
????? DAS BRAUCHE ICH NOCH ;) ?????
# section4
rm -f /mnt/xxxx/rssfeed_all.xml
rm -f /mnt/xxxx/rssfeed_urls.txt
echo; echo 'All temporary files deleted...done'
exit 0
Section3-Problematik:
Es koennte durchaus sein, das mehrere URLs im xml-file vorhanden sind. Diese muesste ich als Liste an grep (zur Pruefung) uebergen, zum checken, ob diese vielleicht schon runtergeladen wurden. Wenn JA, dann findet man diesbezueglich bereits einen LOG-Eintrag. Wenn NEIN, muss die URL aus der Liste an wget uebergeben werden, um diese runterzuladen und dann nach erfolgreichen download einen neuen LOGeintrag in das file 'download.log' anhaengen.
Ich muss wahrscheinlich aus 'rssfeed_urls.txt' eine Liste erzeugen. Den Inhalt (line per line) per grep verifizieren, ob vielleicht im download.log schon etwas vorhanden ist. Wenn ja, dann keine Aktion (für diese spezielle URL, weiter mit der nächsten line). Wenn NEIN, dann Uebergabe an wget und im Anschluss einen neuen LOG-Eintrag inkl. timestamp.
Es kann durchaus sein, das mal nur ein file bereitsteht (also als Resultat eine line aus section2) oder auch mehrere, das bedeutet mehrere lines als Resultat aus section2.
Könnt ihr mir diesbezüglich etwas helfen. Vielen Dank.
hmikux