Filtern von df Ergebnissen in eine Variable

  • 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

  • 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

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • 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 ...

    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

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p6 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    2 Mal editiert, zuletzt von rpi444 (1. Juni 2023 um 14:41)

  • 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

    Einmal editiert, zuletzt von RTFM (1. Juni 2023 um 16:28)

  • 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
  • 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 :)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!