Download Script

ssn

Well-Known Member
hi,
also da ich vom programmieren ned so die ahnung hab wollte ich um eure hilfe bitten.
zur zeit habe ich ein script am laufen das mir einfach nacheinander von verschiedenen links eine datei saugt und diese dann wieder löscht.
es wäre allerdings wesentlich eleganter ein script zu haben dass aus einer liste von links eine zufällige adresse auswählt und von da aus die datei zieht.
wie bewerkstellige ich das?
 

ssn

Well-Known Member
das steht hier nicht zur debatte ;) aber wenn mir jemand hilft dann verrat ich ihm auch den zweck :D
 

dettus

Bicycle User
hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm....
spontan wuerde ich sagen du brauchst so etwas:

Code:
export maxnum=`wc -l linkliste.txt`
export num=`echo 1+$maxnum`
while (num irgendwie groesser als maxnum)
export num=`cat /dev/random | head -c 1 | irgendwas_was_ascii_nach_dec_umwandelt.sh`
export num=`echo 1+$num | bc`
head -n $num | tail -n 1 linkliste.txt
das gibt dir am schluss genau einen einzigen dateinamen aus....
keine ahnung, wie while genau funzt.
und auch keine ahnung, wie man ein ascii-char am schlauesten nach dezimal umwandelt.

so, ich hab dir geholfen.
also, was zur hoelle willst du tun?
 

0815Chaot

FreeBSD/sparc64-Tüftler
Wenn wir bei Shell-Skripten sind... Die bash unterstützt so lustige Sachen wie Arrays, das könnte man jetzt tatsächlich mal brauchen. Dazu folgender Beispielcode:
Code:
#!/usr/local/bin/bash

declare -a LINK                  # Deklariert ein Array für die Links

declare -i ZUFALL=$RANDOM%100    # Deklariert und füllt die Zufallsvariable,
                                 # Zahlenbereich der Zufallszahlen: 0 - 99

LINK[0]=http://LinkNr0           # Hier nun jeweils die Links in das Array
LINK[1]=http://LinkNr1           # eintragen, angefangen bei [0] ...
LINK[2]=http://LinkNr2
LINK[99]=http://LinkNr99         # ... bis hin zu [99]


echo ${LINK[$ZUFALL]}            # Es wird das Array-Feld zwischen 0 und 99
                                 # ausgegeben, das der Zufallszahl entspricht.
Du mußt dann einfach LINK[0] bis LINK[99] mit den Link-Adressen füllen. Wenn du weniger als 100 Link-Adressen hast, dann belege eben mehrere Variablen mit dem gleichen Link, tut der Streuung gut. Rufe das Skript ein paar mal auf, um zu überprüfen, ob dir die Ausgabe zufällig genug ist. Falls alles zur Zufriedenheit ist, änderst du den echo-Befehl in deinen Download-Befehl (wget, ftp, whatever) ab. Und erzählst uns natürlich, warum du so gerne deinen Provider ärgern möchtest :D
 

wageck

BSD Noop
also fährst du auf den huni ab oder wie also ich bin zufrieden mit 1&1 und mit meinem momentanen traffic von 20-40 GB im monat scheint wohl alles ok zu sein also warum machst du das
 

ssn

Well-Known Member
ich will weg von diesem drecksverein, seit ich be idenen unterschrieben hab versprechen sie mir dass ab juli diesen jahren die deutschlandflat für 10¤ verfügbar ist.
seit dem 1. juli ruf ich beim support an und werd nur vertröstet. neben anderen sauereien (wie z.B. die tatsache dass man nicht im tarif "downgraden" kann obwohl mir 100mal gesagt wurde eine tarifWECHSEL wäre möglich usw.) macht mich die tatsache dass ich bei der telekom ne 6000er leitung und bei congster die passende flat dazu haben könnte einfach rasend!
 

0815Chaot

FreeBSD/sparc64-Tüftler
Reisende soll man nicht aufhalten (oder so). Naja, wenn man Versprechen nicht hält und dann den Kunden sogar Geld fürs Abhauen gibt, braucht man sich als Firma auch nicht zu wundern. YMMV.
 

wageck

BSD Noop
dann kann ich ssn verstehen aber ich denk bis die dich gehen lassen brauchst etwas an traffic du weist das dann gmx etc auch nix mehr mit dir zu tun haben will
 

dettus

Bicycle User
und was kriegen die inkompetenten verwaltungsfuzzies bei deinem provider davon mit, dass du die techniker von denen mit non-distributed dos-attacken nervst?

nebenbei...
$RANDOM kannte ich noch gar nicht!
cool!

okay, also damit vereinfacht sich mein skript zu
Code:
export maxlines=`wc -l linkliste.txt`                     # die maximale anzahl an zeilen in deiner linkliste.
declare -i ZUFALL $RANDOM%$maxlines        # holt eine zufallszahl und sorgt dafuer, dass die kleiner ist als die anzahl der zeilen in der linkliste
export ZUFALL=`echo 1+$ZUFALL | bc`           # rechnet +1 zu der zufallszahl dazu
export LINK=`head -n $ZUFALL linkliste.txt | tail -n 1`    # holt genau eine zeile aus deiner linkliste raus.
 

ssn

Well-Known Member
ich habe (noch) einen telekom anschluss, dafür bräucht ich nur online einen congster tarif bestellen und schon wäre ich glücklich :D
da ich ja zuviel zeit hab (noch 2 wochen ferien) hab ich mir mal die arbeit gemacht ca. 50 knoppix cd/dvd links in das script einzufügen. wer sonst noch bedarf an solchen sinnlosen sachen hat, hier bitteschön:
http://ssn.grautier.com/sonstiges/downloadscript
 

0815Chaot

FreeBSD/sparc64-Tüftler
Wenn du den Download-Vorgang immer und immer wieder durchführen willst, dann wäre es stilistisch übrigens besser, das in eine Endlosschleife zu packen:
Code:
#!/usr/local/bin/bash

cd /data/incoming/unused  ||  exit $?

declare -a LINK

LINK[0]=http://ftp.freenet.de/pub/ftp.uni-kl.de/pub/linux/knoppix/KNOPPIX_V3.9-2005-05-27-DE.iso
# Hier dann die Arrays von [1] bis [98]
LINK[99]=http://www.programme.buendnerclan.ch/knoppix/KNOPPIX_V3.9-2005-05-27-EN.iso

while /usr/bin/true
do
  declare -i ZUFALL=$RANDOM%100
  wget -t 3 -T 2 -r -nd --delete-after ${LINK[$ZUFALL]}
done
Dadurch, daß man das Array nur ein einziges Mal belegt, wird das Skript sogar minimal performanter. Ok, das dürfte man auf den meisten Rechnern heutzutage eh nicht mehr merken. :rolleyes:

Eine kleine Anmerkung noch zur Zufallszahl und den Indices des Arrays: Mit einem Modulo 100 bekommst du Zahlen zwischen 0 und 99, dementsprechend werden nur die Elemente [0] bis [99] jemals verwendet werden. Auf das von dir noch angefügte Element [100] wird dagegen nie zugegriffen werden. Natürlich ist das kein Fehler, aber zum Verständnis wollte ich das nochmal anfügen.
 

troll

Well-Known Member
*hüstel*, ich seh da gar nicht sp2 und Dialer und son Zeuchs. Wär das nicht besser denen ein wenig Traffic zu geben? ;-)

CU

Martin
 

dettus

Bicycle User
ohhhhhhh mann...

Code:
det@cx028:[~/test]ssh cx027
Linux cx027 2.6.8-2-686-smp #1 SMP Mon Jan 24 02:32:52 EST 2005 i686 GNU/Linux

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

cx027{det}41: which true
/bin/true

vielleicht faengst du mal das programmieren an?
 

0815Chaot

FreeBSD/sparc64-Tüftler
Mann, Mann, Mann, bei diesem komischen Linux ist aber auch nix dort, wo es hin gehört. :D

Ja, die volle Pfadangabe ist in dem Falle unnötig, aus stilistischen Gründen habe ich sie mir jedoch ganz speziell und ausschließlich bei Endlos-Schleifen angewöhnt. Und mal ehrlich: Um ein paar Linuxer zu ärgern, tippe ich die paar zusätzlichen Zeichen doch gerne ein. :p

Nächstes mal bringe ich dann die until /usr/bin/false - macht genau das gleiche wie while /usr/bin/true, wird aber wieder einige Benutzer seltsamer Betriebssysteme von Neuem in den Wahnsinn treiben. :rolleyes:

Interessant wäre jetzt noch eine Statistik, wie viele Linux-Distributionen /usr/bin/true und wie viele /bin/true verwenden. Wie ist das denn beispielsweise bei Dettux gelöst? :)
 

dettus

Bicycle User
lol.
da wo es auch HINGEHOERT:
Code:
dettus@giesskanne:[~]which true
/bin/true
dettus@giesskanne:[~]which false
/bin/false
;)
 
Zuletzt bearbeitet:

dettus

Bicycle User
btw: du hast meine frage noch nicht beantwortet:

warum sollten ein paar verwaltungsfuzzies mitkriegen, dass du techniker in deren firma nervst?
 

ssn

Well-Known Member
es hat schon bei andren funktioniert, also probier ichs einfach auch.
glaub nicht das sei der erste versuch von diesem drecksverein loszukommen
 

TCM

Well-Known Member
0815Chaot schrieb:
Code:
#!/usr/local/bin/bash

cd /data/incoming/unused  ||  exit $?

wget -t 3 -T 2 -r -nd --delete-after ${LINK[$ZUFALL]}
done
aeh.. das unused und das --delete-after wecken in mir die perverse befuerchtung, dass das zeug auf platte gezogen und dann geloescht wird?! wieso zieht ihr das nicht einfach nach /dev/null? meine fresse..
 
Oben