469 Stimmen

Überprüfen Sie die Ordnergröße in Bash

Ich versuche, ein Skript zu schreiben, das die Größe eines Verzeichnisses berechnet und wenn die Größe weniger als 10 GB und größer als 2 GB ist, eine Aktion durchführt. Wo muss ich meinen Ordnernamen angeben?

# 10GB
SIZE="1074747474"

# Überprüfen Sie die aktuelle Größe
CHECK="`du /data/sflow_log/`"
if [ "$CHECK" -gt "$SIZE" ]; then
  echo "ERLEDIGT"
fi

882voto

Mingyu Punkte 28883

Sie können:

du -hs your_directory

ausführen, was Ihnen eine kurze Ausgabe der Größe Ihres Zielpfads liefert. Durch die Verwendung eines Wildcards wie * können mehrere Verzeichnisse ausgewählt werden.

Wenn Sie eine vollständige Auflistung der Größen für alle Dateien und Unterverzeichnisse in Ihrem Ziel möchten, können Sie folgendes tun:

du -h your_directory

Tips:

  • Fügen Sie das Argument -c hinzu, um eine Gesamt-Zeile am Ende zu sehen. Beispiel: du -hcs oder du -hc.

  • Entfernen Sie das Argument -h, um die Größen in genauen KiB anstelle von benutzerfreundlichen MiB oder GiB-Formaten anzuzeigen. Beispiel: du -s oder du -cs.

177voto

Taxellool Punkte 4043

Wenn Sie nur die Größe des Ordners sehen möchten und nicht die Unterordner, können Sie Folgendes verwenden:

du -hs /Pfad/zum/Verzeichnis

Aktualisierung:

Sie sollten wissen, dass du den verwendeten Festplattenspeicher anzeigt und nicht die Dateigröße.

Sie können --apparent-size verwenden, wenn Sie die Summe der tatsächlichen Dateigrößen sehen möchten.

--apparent-size
      zeigt scheinbare Größen an, anstatt die Festplattennutzung; obwohl die scheinbare Größe normalerweise kleiner ist, kann sie aufgrund von Löchern in ('sparse') Dateien, interner Fragmentierung, indirekten Blöcken und Ähnlichem größer sein

Und natürlich benötigen Sie kein -h (Human Readable) Option innerhalb eines Skripts.

Stattdessen können Sie -b für einen einfacheren Vergleich im Skript verwenden.

Aber Sie sollten beachten, dass -b --apparent-size von selbst anwendet. Und es könnte nicht das sein, was Sie brauchen.

-b, --bytes
      entspricht '--apparent-size --block-size=1'

also denke ich, Sie sollten --block-size oder -B verwenden

#!/bin/bash
SIZE=$(du -B 1 /Pfad/zum/Verzeichnis | cut -f 1 -d "   ")    
# 2GB = 2147483648 Bytes
# 10GB = 10737418240 Bytes
if [[ $SIZE -gt 2147483648 && $SIZE -lt 10737418240 ]]; then
    echo 'Bedingung ergab True'
fi

43voto

Um die Größe aller Verzeichnisse innerhalb eines Verzeichnisses zu überprüfen, können Sie Folgendes verwenden:

du -h --max-depth=1

40voto

paddy Punkte 59105

Verwenden Sie eine Zusammenfassung (-s) und Bytes (-b). Sie können das erste Feld der Zusammenfassung mit cut ausschneiden. Alles zusammen setzen:

CHECK=$(du -sb /data/sflow_log | cut -f1)

39voto

siliconrockstar Punkte 3298

Um nur die Größe des Verzeichnisses zu erhalten, nichts weiter:

du --max-depth=0 ./Verzeichnis

Ausgabe sieht so aus

5234232       ./Verzeichnis

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X