Abfrage von freiem Speicherplatz

FrankH.

Newbie
Registriert
Apr. 2013
Beiträge
5
Hallo liebe Leute.

Ich habe leider keine Ahnung wonach ich suchen soll, noch ob ich hier überhaupt richtig bin. Selbst wenn ich durch Zufall etwas finden würde, würde ich es höchstwahrscheinlich nicht erkennen. Da ich solche Sachen eigentlich auch kaum brauche, bin ich da sehr unbedarft. :D

Zu meinem "Problem".

Ich bin auf der Suche nach einem kleinem bashscript, welches mir auf einem z.B. Usbstick den verfügbaren Speicherplatz ausließt und von diesem einen bestimmten Wert abzieht. Ist der verbleibende Speicherplatz größer als ein angegebener Wert, soll ein wget Befehl ausgeführt werden.

Vieleicht nochmal etwas verständlicher.

Ist der zur Zeit vorhandener Speicherplatz auf dem Stick, minus der zu ladende Dateigröße (Diese ist bekannt) größer als z.B. 500kb, dann führe den Befehl aus. Ist er kleiner, dann unternehme nichts.

Ich hoffe ich konnte mich halbwegs verständlich ausdrücken. Und hoffe ihr habt eine Lösung für mich.

Herzlichen Dank schonmal im Voraus.
Grüße Frank H.
 
Zuletzt bearbeitet:
Ich hab leider kein komplettes Script für dich, aber einen Ansatz: "df" in Kombination mit einem Pattern Matching - Programm wie "gawk".
 
Das sollte zum Basteln reichen

Code:
#!/bin/bash


REMAINING_SPACE=$(df $1 | sed -n 2p | tr -s " " | cut -d ' ' -f 4)


echo "Detected $REMAINING_SPACE kb of free space on $1"


if [ $[$REMAINING_SPACE - 42] > 500 ]; then
    echo "that's enough"
else 
    echo "no way, it's full"
fi
Aufruf z.B.
Code:
./testSpace.sh /dev/sdc1
 
Hey,

super das paßt und funktioniert soweit. Herzlichen Danke.

Leider gibt es auf einem der Geräte auf welchem das script laufen soll keinen tr Befehl. Dieser kann auch nicht nachinstalliert werden.

/tmp # df / | sed -n 2p | tr -s " " | cut -d ' ' -f 4
-sh: tr: not found
/tmp #

gehts auch irgendwie ohne? Hab nun hin und her problert, aber bekomme ich es nicht hin.

Danke
 
Nimm statt dem tr-Teil
Code:
sed 's/ \{2,\}/ /g'

Zur Erklärung - es geht hier darum die multiplen whitespaces durch einzelne zu ersetzen, damit man mit cut vernünftig splitten kann.

P.S.: Keine Ahnung wie elegant/effizient das ist. Ich schreib noch nicht lange shell scripts und finde die Syntax zum Kotzen. :p
 
Zuletzt bearbeitet:
Hey.

das paßt. Ich bin begeistert. Vielen Dank.

Keine Ahnung wie elegant/effizient das ist.

Ist egal, es funktioniert so auf dem Gerät. Das ist wichtig. ;)

Danke
LG

Edit@ mhhhh, irgendwie hab ich dann doch noch einen Fehler drin.

/tmp # /tmp/a.sh /var
Detected 420 kb of free space on /var
[: -: unknown operand
no way, it's full
/tmp #

Wenn ich es richtig erkenne, zieht er die 42 nicht vom vorhandenen Platz ab. (???)
 
Zuletzt bearbeitet:
Oh, mir ist gerade aufgefallen, dass ich da einen schönen Anfängerfehler drin habe.

In der if-Bedingung der Vergleich, der funktioniert so nicht. Statt > bitte mal -gt einfügen, sonst erzeugt der nämlich einfach eine Datei namens '500' statt da zu vergleichen. :D

So sieht die Zeile bei dir aus?
Code:
if [ $[$REMAINING_SPACE - 42] -gt 500 ]; then

Mach mal ein
Code:
set -x
ganz oben ins Script. Dann bekommst du mehr Ausgaben, was so im Script passiert. Das folgende Script
Code:
#!/bin/bash
set -x
REMAINING_SPACE=$(df $1 | sed -n 2p | sed 's/ \{2,\}/ /g' | cut -d ' ' -f 4)


echo "Detected $REMAINING_SPACE kb of free space on $1"


if [ $[$REMAINING_SPACE - 42] -gt 500 ]; then
    echo "that's enough"
else 
    echo "no way, it's full"
fi
ergibt bei mir dann
Code:
++ df /dev/sdd1
++ sed -n 2p
++ sed 's/ \{2,\}/ /g'
++ cut -d ' ' -f 4
+ REMAINING_SPACE=7224766
+ echo 'Detected 7224766 kb of free space on /dev/sdd1'
Detected 7224766 kb of free space on /dev/sdd1
+ '[' 7224724 -gt 500 ']'
+ echo 'that'\''s enough'
that's enough
und da ist zu sehen, dass die Rechnung klappt, d.h. bei deinem Umbau ist irgendwas kaputtgegangen (einige Leerzeichen sind in der bash-Syntax wichtig).
 
Zuletzt bearbeitet: (huch, -x, nicht +x)
Nein, der Fehler liegt bei mir. Hat nichts mit deinem Script zutun. Das funktioniert. Nur eben auf diesenm einem Gerät nicht.

Und zwar liegt es am:

Code:
#!/bin/bash

damit kann ich das script nicht starten.

Code:
/tmp # /tmp/a.sh  /var
-sh: /tmp/a.sh: not found
/tmp #

Ändere ich dies in:

Code:
#!/bin/sh

kann ich es starten, bricht aber mit fehler ab.

Sorry.
Mein Fehler.
 
Zuletzt bearbeitet:
Achso, dann gibt es keine bash auf dem Gerät. Dann musst du mal googlen, wie dieser Punkt in sh-Syntax geschrieben wird.

Deine Ausgabe da sieht aus, als wenn der Aufruf nicht stimmt. Wenn du nicht gerade 2 tmp-Ordner verschachtelt hast, dann kann er das Script ja an der Stelle nicht finden. ;)
 
Hallo,

ok, ich habs auch mit suchen leider nicht hinbekommen. Ich werde es erstmal so machen:

Code:
#!/bin/sh
REMAINING_SPACE=$(df /var | sed -n 2p | sed 's/ \{2,\}/ /g' | cut -d ' ' -f 4)


  echo "Detected $REMAINING_SPACE kb of free space on /var"


    if [ $REMAINING_SPACE -gt 542 ]; then
        echo "that's enough"
        else
            echo "no way, it's full"
            fi

Ich kann ja zu dem Platz der frei bleiben soll ( hier 500), schon im Script die Größe der zu ladenden Datei (die ja hier bekannt ist 42) dazurechnen. (500+42=542). So bleiben nach dl der datei "42" eben "500" übrig. So funktioniert es auch. ;)

Danke vielmals für deine Hilfe. Vieleicht fällt ja irgendwann jemanden noch was ein. ;)

LG
Frank H.
 
Zuletzt bearbeitet:
Zurück
Oben