it-swarm.com.de

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

Ich versuche, ein Skript zu schreiben, das eine Verzeichnisgröße berechnet. Wenn die Größe weniger als 10 GB und mehr als 2 GB beträgt, führen Sie eine Aktion aus. Wo muss ich meinen Ordnernamen angeben?

# 10GB
SIZE="1074747474"

# check the current size
CHECK="`du /data/sflow_log/`"
if [ "$CHECK" -gt "$SIZE" ]; then
  echo "DONE"
fi
272
tom

Du kannst tun:

du -h your_directory

dadurch erhalten Sie die Größe Ihres Zielverzeichnisses.

Wenn Sie eine kurze Ausgabe wünschen, ist du -hcs your_directory Nizza.

536
Mingyu

wenn Sie nur die Ordnergröße und nicht die Unterordner sehen möchten, können Sie Folgendes verwenden:

du -hs /path/to/directory

pdate:

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

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

--apparent-size
      print  apparent  sizes,  rather  than  disk  usage; although the apparent size is usually smaller, it may be larger due to holes in ('sparse')
      files, internal fragmentation, indirect blocks, and the like

Und natürlich ist die Option -h (vom Menschen lesbar) in einem Skript nicht erforderlich.

Stattdessen können Sie -b verwenden, um den Vergleich innerhalb des Skripts zu vereinfachen.

Sie sollten jedoch beachten, dass -b--apparent-size für sich selbst anwendet. Und es könnte nicht das sein, was Sie brauchen.

-b, --bytes
      equivalent to '--apparent-size --block-size=1'

also denke ich, du solltest --block-size oder -B verwenden

#!/bin/bash
SIZE=$(du -B 1 /path/to/directory | cut -f 1 -d "   ")    
# 2GB = 2147483648 bytes
# 10GB = 10737418240 bytes
if [[ $SIZE -gt 2147483648 && $SIZE -lt 10737418240 ]]; then
    echo 'Condition returned True'
fi
128
Taxellool

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

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

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

du --max-depth=0 ./directory

ausgabe sieht aus wie

5234232       ./directory
23
siliconrockstar

wenn Sie nur die Gesamtgröße des Ordners und möglicherweise im MB- oder GB-Format anzeigen möchten, versuchen Sie es mit dem folgenden Skript

$du -s --block-size=M /path/to/your/directory/
11
Shivraaz

Um die Größe aller Verzeichnisse in einem Verzeichnis zu überprüfen, können Sie Folgendes verwenden:

du -h --max-depth=1

4
# 10GB
SIZE="10"


# check the current size
CHECK="`du -hs /media/662499e1-b699-19ad-57b3-acb127aa5a2b/Aufnahmen`"
CHECK=${CHECK%G*}
echo "Current Foldersize: $CHECK GB"

if (( $(echo "$CHECK > $SIZE" |bc -l) )); then
        echo "Folder is bigger than $SIZE GB"
else
        echo "Folder is smaller than $SIZE GB"
fi
3
Gutz-Pilz

Wenn es hilft, können Sie auch einen Alias ​​in Ihrem .bashrc oder .bash_profile erstellen.

function dsize()
{
    dir=$(pwd)
    if [ "$1" != "" ]; then
            dir=$1
    fi
    echo $(du -hs $dir)
}

Dies gibt die Größe des aktuellen Verzeichnisses oder des Verzeichnisses aus, das Sie als Argument übergeben haben.

3
Vignesh Raja