Problem mit Shell-Script und Schleifen

  • Moin!


    Ich weiß, es ist wahrscheinlich eine dumme Frage, aber ich habe da bei einem Script, das ich schreibe ein Problem (oder genauer 2 oder 3.... :rolleyes::(


    1. Ich brauche eine Schleife, die quasi mit ls *.xyz eine Liste generiert und dann mit jedem Element dieser Liste einen reihe von aktionen ausführt, bis das letzte Element bearbeitet ist.


    2. Diese Schleife muß auch eine Liste von Dateien einlesen und dann prüfen, ob die Größe >0 ist und sonst die Datei löschen (also bei Größe=0)


    Wenn ich dann ganz viel Glück habe finde ich noch jemanden, der mir sagt, wie ich die Größe eines verzeichnisses in einen ganzzahligen Wert bekomme mit dem ich rechnen kann!


    Danke schonmal und Gruß


    Toxic

    Registrierter VDR-User #1275


    VDR-Server: Proxmox 7.1 - LXC Container - Debian 11.5 - eTobi-VDR 2.6.0

    DVB-Hardware: Digital Devices - Cine S2 V5.5 und V6

    VDR-Clients: FireTV Sticks 2 bis 4K Max und Kodi 19.4

    Einmal editiert, zuletzt von Toxic-Tonic ()

  • Zu 1.

    Code
    ls *.xyz | while read NAME; do
      aktion1 "$NAME"
      aktion2 "$NAME"
    done


    Zu 2. (geht ohne awk eleganter, Optimierung überlasse ich ronnykornexl :D)


    Code
    SIZE=$(ls -l "$NAME" | awk '{ print $5 }')
    if [ $SIZE -eq 0 ]; then
      rm "$NAME"
    fi


    Und zuletzt (Mann, hast Du ein Glück :])
    (geht sicher auch eleganter, aber funktioniert)

    Code
    TOTAL=$(du --total "/wo/auch/immer" | tail -n1 | awk '{ print $1 }')
  • Spitze!!! Vielen Dank!! Klappt soweit! Wie stelle ich den fest, obo eine Datei existiert und lasse nur unter der bedingung etwas damit machen? Habe s so probiert:


    if [ test.vob ]; then rm egal.txt



    Also existiert die datei test.vob? ja dann lösch, nein dann mach nix!


    Geht aber so nicht!! Was ist falsch?


    Gruß


    Toxic

    Registrierter VDR-User #1275


    VDR-Server: Proxmox 7.1 - LXC Container - Debian 11.5 - eTobi-VDR 2.6.0

    DVB-Hardware: Digital Devices - Cine S2 V5.5 und V6

    VDR-Clients: FireTV Sticks 2 bis 4K Max und Kodi 19.4

  • Zitat

    Original von Toxic-Tonic
    if [ test.vob ]; then rm egal.txt


    Code
    if [ -e test.vob ] ; then rm egal.txt; fi


    Ach ja:
    man test

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

  • kein man unter linvdr, sorry!! ;)


    Danke erstmal, werde es ausprobieren! Habe auch doch noch ein Problem mit dem Größentest vom Lord!


    Danke und Gruß


    Toxic

    Registrierter VDR-User #1275


    VDR-Server: Proxmox 7.1 - LXC Container - Debian 11.5 - eTobi-VDR 2.6.0

    DVB-Hardware: Digital Devices - Cine S2 V5.5 und V6

    VDR-Clients: FireTV Sticks 2 bis 4K Max und Kodi 19.4

  • zu 1. und 2. und 3.



    auch wenn die Frage schon beantwortet war, ich konnte nicht anders :)

  • Danke, jede Antwort hilft und wenn es nur zu meinem besseren Verständnis (oder größeren Verwirrung) beiträgt!


    Gruß


    Toxic

    Registrierter VDR-User #1275


    VDR-Server: Proxmox 7.1 - LXC Container - Debian 11.5 - eTobi-VDR 2.6.0

    DVB-Hardware: Digital Devices - Cine S2 V5.5 und V6

    VDR-Clients: FireTV Sticks 2 bis 4K Max und Kodi 19.4

  • Hi,


    Zitat

    Original von uetzguer
    zu 1. und 2. und 3.



    auch wenn die Frage schon beantwortet war, ich konnte nicht anders :)


    Die Lösung ist schon ganz gut, aber ich würde den Anfang so ändern:

    Code
    # Alle Dateien *.xyz durchlaufen, ggf. kein Schleifendurchlauf
    for datei in *.xyz


    Und hier kann man noch das "!" wegoptimieren:

    Code
    # Wenn Dateigroesse 0, dann loeschen
      [ -s "$datei" ] || rm -f "$datei"


    Gruß,
    Andreas

  • Zitat

    Original von LordJaxom
    uetzguer:


    Ich fürchte Deine Variante hat ein Problem mit Dateinamen, die Leerzeichen enthalten, da dürften dann Namensteile durch die Schleife wandern ;)


    Das wäre in meinem Fall nicht so schlimm, da ich nach ISO-Format benannte Vobs bearbeite (keine Lehrzeichen!!) ;)


    Danke für eure Hilfe, ich lasse grade das Script zum erstenmal durchlaufen! Wünscht mir Glück!! Wenn alles gut geht werde ich es im Bord vorstellen!!


    Danke und Gruß


    Toxic

    Registrierter VDR-User #1275


    VDR-Server: Proxmox 7.1 - LXC Container - Debian 11.5 - eTobi-VDR 2.6.0

    DVB-Hardware: Digital Devices - Cine S2 V5.5 und V6

    VDR-Clients: FireTV Sticks 2 bis 4K Max und Kodi 19.4

  • So, mein Script ist fast fertig! Ich hänge jatzt an einer total bescheuerten Stelle. Ich muß mit echo deine Zeile in eine XML-Datei einfügen, und die Zeile enthält eine Variable und vor allem " (Anführungsstriche). Leider Interpretiert echo die " immer als funktionszeichen und in der Ziel-Datei ist die Zeile dann ohne die "! Wie bekomme ich die " in die Datei??? Ich bin kurz vorm Wahnsinn!!!


    Gruß


    Toxic

    Registrierter VDR-User #1275


    VDR-Server: Proxmox 7.1 - LXC Container - Debian 11.5 - eTobi-VDR 2.6.0

    DVB-Hardware: Digital Devices - Cine S2 V5.5 und V6

    VDR-Clients: FireTV Sticks 2 bis 4K Max und Kodi 19.4

  • JAAAAA!! DANKE!!!


    Hatte es so ähnlich probiert, nur hatte ich glaube ich einen \ zuviel!!



    Danke und Gruß


    Toxic

    Registrierter VDR-User #1275


    VDR-Server: Proxmox 7.1 - LXC Container - Debian 11.5 - eTobi-VDR 2.6.0

    DVB-Hardware: Digital Devices - Cine S2 V5.5 und V6

    VDR-Clients: FireTV Sticks 2 bis 4K Max und Kodi 19.4

  • OK, nächstes Problem! Ich habe diese Schleife gebaut um alle Dateien mit der größe 0 und einer bestimmten Endung zu löschen. Jetzt wollte ich es um die Fuktion ergänzen, bei Dateien größer 0 die Summe der Dateien zu berechnen. Die Schleife sieht so aus:

    Code
    ls *.mp2|while read MP2F; do
     SIZE=$(ls -l "$MP2F"|awk '{ print $5 }')
     if [ $SIZE -eq 0 ]; then rm $MP2F
     else ASIZE=$[$ASIZE+$SIZE]
     echo $ASIZE
     echo
     fi
     echo $ASIZE
    done
    echo $ASIZE

    Das Problem ist nun, das innerhalb der Schleife (also vor dem done) die Variable gesetzt ist, aber direkt nach dem done die Variable nicht mehr bekannt ist! Wie kann ich das umgehen?


    Danke und Gruß


    Toxic

    Registrierter VDR-User #1275


    VDR-Server: Proxmox 7.1 - LXC Container - Debian 11.5 - eTobi-VDR 2.6.0

    DVB-Hardware: Digital Devices - Cine S2 V5.5 und V6

    VDR-Clients: FireTV Sticks 2 bis 4K Max und Kodi 19.4

  • Habe ich versucht, habe testweise eine "globale" Variabele definiert (TEST) und gabe in der zeile vor dem done


    Ausgabe war dann einmal richtig (von vor dem done) und einmal nichts (nach dem done)! Da amuß es einen anderen Trick geben!


    Gruß


    Toxic

    Registrierter VDR-User #1275


    VDR-Server: Proxmox 7.1 - LXC Container - Debian 11.5 - eTobi-VDR 2.6.0

    DVB-Hardware: Digital Devices - Cine S2 V5.5 und V6

    VDR-Clients: FireTV Sticks 2 bis 4K Max und Kodi 19.4

  • Hab jetzt erstmal die elegante Schleife gegen dreimal hinternander das gleich ausführen getauscht! Geht so auch (zumal es nur um 3x machen geht!)! Wenn ich mich ans Code-Bereihnigen mache werde ich nochmal testen! Wie war das nochmal "Form follows funktion!"!!


    Gruß


    Toxic

    Registrierter VDR-User #1275


    VDR-Server: Proxmox 7.1 - LXC Container - Debian 11.5 - eTobi-VDR 2.6.0

    DVB-Hardware: Digital Devices - Cine S2 V5.5 und V6

    VDR-Clients: FireTV Sticks 2 bis 4K Max und Kodi 19.4

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!