Script zum kopieren von Dateien

  • Und als Tip beim entwickeln/testen des Skriptes:


    - Nutze "#" um eigene "Erinnerungen" zu hinterlassen. :winking_face:
    - Nutze "echo" VOR den auszuführenden Kommandos beim testen, wenn kritische Dinge wie Löschen o.ä., welches sich aus Variablen ergibt, um vor Überraschungen gefeit zu sein (Huch, wieso ist jetzt DAS gelöscht :-)). Wenn alles klappt, dann halt wieder entfernen
    - Auch nützlich zur Fehlersuche und immer gern vergessen: Im Skript das Kommado "set -x" zu Beginn einbauen oder alternativ "bash -x <skriptname>"

  • das mit dem cp -u stimmt schon


    aber er hat ja zwei srcipte, restore und backup. Beim Backup mit cp -u oder rsync kopieren, es werden also nur geänderte Dateien gesichert. Im restore einfach mit cp -a kopieren, quasi ein "force" zurücksichern, egal wie alt bzw. wie groß die Datei ist.


    Wenn es Textdateien wie (python)scripte, config files etc. sind, könnte man auch mit diff die Dateien vergleichen, dass heisst es wird nur dann kopiert, wenn sich der Inhalt geändert hat.



    Das mit rsync war nur ein Beispiel, wie man das einfacher lösen könnte - ohne deine Regex, wenn es cp -u nicht gibt. Man kann das über viele Wege lösen - wie gesagt, je nach Möglichkeiten und Kenntnissen. Wichtig ist nur, dass das Ergebnis stimmt.


    Wie man dann ein script mit Schleifen und Variablen "verschlankt" kommt dann irgendwann sowieso von selbst, wenn man tippfaul ist :winking_face:


    Der nächste Schritt ist dann "Schalter" ins Script einzubauen, damit man nicht zwei scripte hat, das eine Script wird dann aber schneller unübersichtlich, wenn man schlecht oder gar nicht kommentiert


    z.B.
    /usr/script/script.sh --backup
    /usr/script/shript.sh --restore

    Gruß Fred


    Die Dreambox ist tot, es lebe die Dreambox


    4 Mal editiert, zuletzt von Fred Bogus Trumper ()

  • Hi,


    Danke für eure Tipps. Ich werde es auf jedenfall mal angehen. Das Problem ist im Moment die Zeit. Jetzt werde ich mich erstmal etwas einlesen in die Materie.
    Auch werde ich mich bei den ersten Fehlversuchen wieder melden. Mein größtes Problem ist das ich immer einfach zu viel will für den Anfang und irgendwann wird es frustrierend wenn es nicht weitergeht aber dafür seid ihr dann da. :winking_face:

    MfG
    latte

    2 Mal editiert, zuletzt von latte ()

  • Da muss man durch, wenn man es will. Man lernt ja nicht nur scripten, sondern lernt commandos und Annehmlichkeiten der shell die man nicht für möglich hielt. Ausserdem muss man sich dann irgendwann auch mit dem Linux kernel befassen und versteht viel besser, wie ein Computer oder ein Betriebssystem funktoniert - zumindest ging es mir so.


    Für ein 6 zeiliges Script, für das du heute 2 Tage benötigst, weil du nur am googeln und lesen bist benötigst du in ein, zwei Jahren 5 Minuten und schüttelst das Script einfach aus dem Ärmel ohne die commands vorher zu testen - und es funktioniert dann sogar beim 1. Aufruf ohne Fehlermeldung


    Ich tappte 4 Jahre lang auch völlig im Dunkeln was Linux/Scripte anging und war froh das meine Dreambox lief - bis vor mich vor ca. 6 Jahren mehr damit zu beschäftigen begann, weil irgendetwas nicht so funktionierte wie ich wollte und es keine fertige Lösung gab oder ich sie nicht gefunden habe. Mitlerweile laufen auf meinen Boxen ein paar Sachen die auf keiner anderen Box zu finden sind. Das Meisten davon über Scripte gelöst, weil ich damit von Anfang an am besten klar kam. Ich habe z.B. meinen eigenen "networkmount daemon" gescriptet, weil ich weder mit autofs (auto.network bzw. auto.gemini) geschweige mit dem Netzwerkbrowser 100% glücklich war. Nie wieder nicht eingebundene Netzwerk shares beim Booten oder Dauerspinner weil ein share nicht (mehr) erreichbar war.


    Für mich ich das einfach ein Hobby geworden. Vielleicht wird es das bei dir auch.


    Viel Spaß beim Tüfteln und Ärgern :winking_face:

    Gruß Fred


    Die Dreambox ist tot, es lebe die Dreambox


    4 Mal editiert, zuletzt von Fred Bogus Trumper ()

  • Hi,


    so hier mal der erste Entwurf. Ich weiß etwas übertrieben für den Anfang aber ich sagte ja das ich immer ziemlich viel will wenn ich erst mal angefangen habe. :tongue:
    Beim lesen kommt man ja auf die seltsammsten Ideen.
    Aber für heute ist erstmal Schluss, komischerweise wollte die if Schleife nicht, naja wenn man die Variable in Anführungszeichen setzt kein Wunder.


  • Hallo latte,


    Gratuliere, da biste aber schon ein deutliches Stücke vorangekommen.


    Ein paar Gedanken meinerseits als Anregung:


    1) Du kopierst ja immer die gleichen Dateien von A->B oder B->A...


    Wenn ich es richtig sehe, dann behältst Du auch im Backup die Verzeichnisstruktur.
    Wie wäre es die Dateien in Variablen zu packen?


    Code
    FILE1="/usr/lib/enigma2/python/Components/UsageConfig.py_Merlin4_gepatcht"
    BACKUPSUFFIX="/media/hdd/save"
    
    
    # Im Backup-Fall könntest du dann wie folgt kopieren:
    #cp -f $FILE1 $BACKUPSUFFIX$FILE1
    # im Restore-Fall :
    cp -f $BACKUPSUFFIX$FILE1 $FILE1

    Verwendest Du für die Dateivariablen ein Array, dann kannst Du einfach alle Dateien in einer Minischleife nacheinander kopieren lassen.

    Klappt das, dann kann man aus dem Script sehr einfach ein Backup und Restore in eins machen :)


    Möchtest Du die Dateigröße nur für eine Datei checken oder für alle?
    Und ist das wirklich nötig? Wäre nicht ein Vergleich der Dateien günstiiger? Dann bräuchtest Dich nicht um die Dateigrößen kümmern und diese im Script hinterlegen :winking_face:

    Grüße
    ...jp


    DM900 / OE2.5 Experimental ... und sehr glücklich damit :)

    5 Mal editiert, zuletzt von juanito_perez ()

  • wow, sieht schon super aus *respekt*


    kleine Anregung meinerseits zur case Abfrage
    das y/n mit einem Tastendruck - ohne Enter zur Bestätigung und für die Eingabe ist nur ein Zeichen erlaubt, alles andere führt zum Abbruch


    und ein Beispiel, wie man mit echo code sparen kann, vor allem damit es übersichtlich bleibt
    echo -e "\nstring" = new line and string
    echo -e "\tstring\n" = tab string and new line at the end


    ist aber nicht notwendig


    z.B.

    Gruß Fred


    Die Dreambox ist tot, es lebe die Dreambox


    2 Mal editiert, zuletzt von Fred Bogus Trumper ()

  • Ich sichere so meine EPG!


    Sichern:


    init 4 && sleep 5 && rm /media/hdd/backup/epg.dat && cp -f /media/hdd/epg.dat /media/hdd/backup/epg.dat && sleep 5 && init 3



    Restore:


    init 4 && sleep 5 && cp -f /media/hdd/backup/epg.dat /media/hdd/epg.dat && sleep 5 && init 3