Pro-Linux.de

Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 11. Dez 2018 21:44

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: wget erzeugt 0 Byte Dateien!?
BeitragVerfasst: 23. Sep 2005 15:24 
Offline
Benutzeravatar

Registriert: 31. Dez 2004 14:44
Beiträge: 53
Ich habe in meiner crontab ein automatisches Laden mit wget realisiert, um eine Datei regelmäßig zu laden (Wolkendatei für xplanet). Das Problem: steht die Internetverbindung nicht, dann überschreibt wget die alte (Wolken)Datei mit einer 0 Byte Datei. Die Information ist also weg. Gibt es einen Befehl, der dafür sorgt, dass erst nach ERFOLGREICHEM Download die bestehende Datei überschrieben wird?

Eine Idee?

Gruß Fanta


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23. Sep 2005 17:34 
Offline
prolinux-forum-admin
Benutzeravatar

Registriert: 05. Mai 2004 7:35
Beiträge: 1238
Eine Möglichkeit wäre, die Datei, welche du verwenden willst, immer umzubenennen - und zwar nur dann, wenn wget 0 beim Beenden zurückgab (also hier im Beispiel wget_success auf 1 gesetzt wird):
Code:
#!/bin/bash
wget_success=0
wget blabliblub.de/bla.txt || wget_success=1

if [ "$wget_success" -eq 1 ]; then
        mv bla.txt real_bla.txt
else
        echo wget nicht erfolgreich
fi


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23. Sep 2005 18:58 
Offline
Benutzeravatar

Registriert: 31. Dez 2004 14:44
Beiträge: 53
Vielen Dank für Deine Antwort. So ähnlich habe ich es schon versucht, aber da ich von den Shell-Scripten nicht viel Ahnung habe, konnte ich Deine Idee letzendlich aufgreifen und anpassen. Mein Code:
[code]
#!/bin/bash
wget_success=0
wget -q -N http://rcswww.urz.tu-dresden.de/~es1792 ... s_2048.jpg -O /home/asmb/.xplanet/images/cloud_zwischen.jpg && wget_success=1

if [ "$wget_success" -eq 1 ]; then
mv ~/.xplanet/images/cloud_zwischen.jpg ~/.xplanet/images/cloud.jpg
#echo wget ERFOLGREICH
#else
#echo wget nicht erfolgreich
fi
[/code]

statt mv kann auch cp für kopieren verwandt werden. Das klappt ganz gut!
Ich versuche noch etwas anderes mit Größenberechnung.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23. Sep 2005 19:37 
Offline
prolinux-forum-admin
Benutzeravatar

Registriert: 05. Mai 2004 7:35
Beiträge: 1238
Code:
wget -q -N http://rcswww.urz.tu-dresden.de/~es179238/clouds_2048.jpg -O /home/asmb/.xplanet/images/cloud_zwischen.jpg && wget_success=1
Das wird nicht zum Erfolg führen. Du musst "||" - Oder statt "&&" - Und verwenden. Die Bash kontrolliert dann den Gesamtausdruck, ob er wahr ist. Wenn ein Oder verwendet wird, muss die Bash, falls der erste Ausdruck 0 (also ein fehlerfreies wget) ist, den zweiten mit kontrollieren (also wget_success auf 1 setzen (ist immer wahr)). Wenn du Und benutzt, muss die Bash in jedem Fall den zweiten Ausdruck auch kontrollieren (setzt also in jedem Fall wget_success auf 1).


Nach oben
   
 Betreff des Beitrags: so gehts
BeitragVerfasst: 23. Sep 2005 19:48 
Ich habe das jetzt noch einmal geändert. So gefällt es mir noch besser, weil die Größe der Datei mit reinfließt. Und jetzt die Anleitungen für alle, die so gar keine Ahnung von Shell-Scripten haben, so wie ich :
Nimm einen Editor, z.B. kate
kopier den folgenden Text rein und passe ihn an Deine Verzeichnisse etc. an.



#!/bin/bash
wget -q -N http://rcswww.urz.tu-dresden.de/~es1792 ... s_2048.jpg -O /home/asmb/.xplanet/images/cloud_zwischen.jpg
filesize=`du ~/.xplanet/images/cloud_zwischen.jpg | cut -c 1-2`

if [ "$filesize" -ge 1 ]; then
cp ~/.xplanet/images/cloud_zwischen.jpg ~/.xplanet/images/cloud.jpg
#echo wget ERFOLGREICH
#else
#echo wget nicht erfolgreich
fi


speichere Datei unter name. Dann führe den Befehl chmod +x name, der macht eine ausführbare Datei. Das muss nur einmal gemacht werden. Ausgeführt wird name dann mit ./name

Um das Programm regelmäßig zu starten, verwende z.B. crontab.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23. Sep 2005 21:01 
Offline
prolinux-forum-admin
Benutzeravatar

Registriert: 14. Jan 2000 15:37
Beiträge: 699
Wohnort: Jülich
Hi,

wenn Du es an der Dateigröße aufhängen willst, dann verwende doch einfach die Option -s (size) zum test-Kommando, dass Du beim if verwendest:
Code:
if [ -s /home/asmb/.xplanet/images/cloud_zwischen.jpg ] ; then
    echo "Ich existiere und habe mind. 1 Byte Grösse."
else
    echo "Entweder es gibt mich nicht oder ich bin 0 Byte gross."
fi
Aber eigentlich ist auch das nur ein Umweg. Der direkteste und shellskript-typische Weg wäre
Code:
if wget ... ; then
  mv quelle ziel
else
  echo wget hat nicht geklappt
fi
Nach "if" kommt ein ganz normales Kommando. if bewertet dessen Exitcode: 0 ist nach UNIX-Konvention "Alles OK", jeder andere Wert bedeutet "Irgendwas ging schief". Das "[" nach dem if, wie lateralus und Du es programmiert habt, ist in Wirklichkeit nur das test-Kommando - siehe "man test" bzw. "man bash" in der Sektion "CONDITIONAL EXPRESSIONS". Hier wird eben der Exitcode von wget bewertet, der bei Problemen auf 1 gesetzt wird, bei Erfolg gleich 0 - genau wie erwartet.

Jochen

_________________
Die grösste Lüge der EDV? "Mal eben..."


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 24. Sep 2005 10:10 
Offline
Benutzeravatar

Registriert: 31. Dez 2004 14:44
Beiträge: 53
Erst einmal vielen Dank für Euer Bemühen!
Deine Idee scheint die einfachste zu sein, wenn es darum geht, herauszufinden, ob eine Dateigröße>0 ist.
Ich muss aber wissen, ob die Dateigröße>400kB ist, weil es manchmal Probleme beim Download gibt und ich nur "vollständige" cloud_zwischen.jpg zu cloud.jpg kopieren möchte . Deshalb fügte ich jetzt

filesize=`du ~/.xplanet/images/cloud_zwischen.jpg | cut -c 1-3`
#echo $filesize
if [ "$filesize" -ge 400 ]; then

ein. Das Problem:
wenn die Dateigröße sehr klein ist (<10kB, wie z.B. eine Datei mit 0 Byte). Dann kommt z.B. 9 / zurück (kein integer, Problem mit if). Das liegt an dem cut Befehl.
Gibts noch eine andere Möglichkeit als der Befehl du, die Dateigröße herauszufinden (als Ergebnis darf nur die Größe ausgegeben werden!)?

Gruß Fanta


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 24. Sep 2005 15:31 
Offline
prolinux-forum-admin
Benutzeravatar

Registriert: 14. Jan 2000 15:37
Beiträge: 699
Wohnort: Jülich
Das Problem liegt nicht am du-, sondern am cut-Kommando! Mittels der Option "-c 1-3" schneidet cut aus der Eingabe die ersten drei Zeichen heraus. Statt dessen solltest Du ihm sagen, dass Dich das erste Feld interessiert:
Code:
filesize=`du ~/.xplanet/images/cloud_zwischen.jpg | cut -f 1` 
Als Delimiter verwendet cut per Default Leerzeichen - das passt dann auch schon.

Wenn Du die exakte Anzahl Bytes haben willst, musst Du "ls -l" verwenden:
Code:
ls -l ~/.xplanet/images/cloud_zwischen.jpg | awk '&#123;print $5&#125;'
Da cut jedes einzelne Leerzeichen als einen Feldtrenner sieht, wird es einfach zu unflexibel. Statt dessen sage ich dem etwas klügeren awk, dass mich das 5. Feld in der Ausgabe interessiert.

Jochen

_________________
Die grösste Lüge der EDV? "Mal eben..."


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 24. Sep 2005 16:47 
Offline
Benutzeravatar

Registriert: 31. Dez 2004 14:44
Beiträge: 53
Danke, Jochen. Deine Idee ist einfach und klappt wunderbar. Darauf hätte ich eigentlich auch kommen können.

Gruß Fanta


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de