Filtern von df Ergebnissen in eine Variable

Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!
  • Hallo,


    folgende Problemstellung. Ich möchte mit meinem Raspberry Pi Zero wh eine Zeitrafferaufnahme erstellen. Da dieser sich die meiste Zeit nicht im direktem zugriff befindet, möchte ich diesen mit einem USB-Hub und 2 USB-Sticks (oder Festplatten) ausstatten.

    Vor jedem Speichern eines Bildes soll überprüft werden, ob noch genügend Speicherplatz vorhanden ist auf dem Speichermedium und sonst auf das andere geschrieben werden.


    Mit


    Code
    df -h --output=pcent /dev/sda3 > /home/test/test/speicher


    erhalte ich immer zwei Zeilen.

    Use%
    47%


    Wie kann ich nur die 47% erhalten und wie übergebe ich diese dann in min zukünftiges Bash-Script um dann über simple vergleiche zu sagen schreibe auf stick x oder y?

    Ich habe schon etwas von Pandas Dataframe gelesen, wollte aber nicht mehr auf den Pi installieren, da ich immer im Kopf habe, das er wenig Leistung hat und schnell ausgelastet ist


    Schon mal Danke an alle, die es lesen und die die Ideen/Lösungen äußern


    Gruß Y3t1

  • Y3t1 Pandas Dataframes haben nichts mit dem Kommandozeilenprogramm ``df`` zu tun.


    Man könnte hier ``tail`` verwenden um die letzte Zeile zu erhalten.


    Die ``-h``-Option macht hier nicht so wirklich Sinn weil die auf die Prozentangabe keinen Einfluss hat.

    „Eat the rich — the poor are full of preservatives.“ — Rebecca ”Becky” Connor, The Connors

  • Tell Statt '*' wäre da '\+' besser, sonst kann $free auch die leere Zeichenkette sein, und dann gibt Zeile 3 einen ``[: -lt: unary operator expected`` Fehler.

    „Eat the rich — the poor are full of preservatives.“ — Rebecca ”Becky” Connor, The Connors

  • Tell Doch "\+" kennt ``grep``:

    Bash
    $ df --output=pcent /dev/sda2 | grep -o '[0-9]\+'
    24

    ``egrep`` oder ``grep -E`` braucht man, wenn man das '+' ohne den \ schreiben können will.


    Edit: Alternativ kann man, falls man die Bash verwendet, das %-Zeichen auch bei der Variablenersetzung entfernen:

    Bash
    #!bin/bash
    free=$(df --output=pcent /dev/sdb1 | tail -n 1)
    
    if [ "${free%%%}" -lt 75 ]
    then
      echo Go ahead
    else
      echo Full
    fi

    „Eat the rich — the poor are full of preservatives.“ — Rebecca ”Becky” Connor, The Connors

  • Z. B. mit:

    Code
    df -h --output=pcent /dev/sda3 | grep -vi use | tr -d ' '%

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Edited 2 times, last by rpi444 ().

  • Mit < stat -f -c %a /dev/sda3 > werden die noch freien Blöcke für den aufrufenden User angezeigt. <man stat>


    Servus !




    Ed: Eigentlich wollte ich den TO nur ersuchen, den Thread Titel von Ausleiten auf Filtern zu ändern, weil es mir jedesmal kalt über den Rücken läuft (bei Ausleiten)

    RTFM = Read The Factory Manual, oder so

    Edited once, last by RTFM ().

  • Und fuer die Freunde von awk werfe ich noch

    Code
    df -h --output=pcent /dev/sda3 | awk 'ENDFILE{gsub ("[% ]",""); print}'

    ein :lol:

    Funktioniert bei mir nicht! , :no_sad:


    Nur mal so am Rande. Um die beiden Leerzeichen am Zeilenanfang kann sich auch einfach die Bash kümmern. Da muss man ja nicht extra was reinfummeln. Mit sed wäre das dann einfach so:

    Code
    echo $(df --output=pcent /dev/sda3 | sed -n '$p') > /home/test/test/speicher
  • Funktioniert bei mir nicht!

    ENDFILE ist neu und scheint Probleme zu machen.


    Code
    df --output=pcent /dev/mmcblk0p1 | awk '/[0-9]+%/ { gsub("[% ]","");print }'

    funktioniert. Aber der sed Ansatz ist natuerlich der kuerzeste :thumbup:

    :no_sad: Kein Backup - kein Mitleid :no_sad:
    :) Nutze lieber raspiBackup bevor Du in die Luft gehst :)

    Edited once, last by framp ().

  • Mit Python gemacht und direkt dazugelernt.

    Das Programm df berücksichtigt die nutzbare Größe des Dateisystems.
    Reservierte Sektoren können nicht belegt werden, sind aber in der Ausgabe von disk_usage als total mit enthalten.

    Deswegen muss man free und used addieren, um die reale nutzbare Größe auszurechnen.

  • Ich danke euch allen für eure Tipps und Lösungen, ich werde mich mal mit sed befassen und wahrscheinlich auch verwenden.


    RTFM ich beuge mich deinem Unwohl und habe es auf Filtern geändert :)