: ########################################################################## # Shellscript: hdu - du-Ausgabe auswerten # Versionsnr : 0.1 (beta) # Projekt : # Autor : Heiner Steven (heiner.steven@odn.de) # Erstellung : 24.03.94 # Category : File Utilities # SCCS-Kenn. : $Id: hdu,v 1.1.1.1 1999/06/15 19:29:05 heiner Exp $ ########################################################################## # Beschreibung: # o ruft du ("disk usage") auf, und bereitet die Ausgabe so auf, # dass der Platzverbrauch jedes Verzeichnisses prozentual zum # Gesamtverbrauch angezeigt wird. # o Beim Paramter -f kann eine beliebige Datei angegeben werden, # deren erste Spalte Zahlen enthaelt ########################################################################## PN=`basename $0` # Programmname VER='0.1 (beta)' Tmp=${TMPDIR:=/tmp}/hdu$$ # Hilfsdatei UserFile=nein # Datei mit Parameter -f angegeben? Header=nein # Kopfzeile (ja/nein) Min=0 # kleinste Prozentangabe fuer Ausgabe Hilfetext () { echo "$PN - du-Ausgabe aufbereiten, Version $VER (stv '94)" echo "Aufruf: $PN [-H] [-p Prozent] [-f file] [Verzeichnis ...]" echo " -H (header) Kopfzeile ausgeben" echo " -p (percent) Zeilen ab mindestens ausgeben" echo " -f (file) Datei benutzen (Vorgabe: 'du' aufrufen)" echo echo "Die Datei, die mit dem Parameter -f angegeben wurde, muss als" echo "erste Spalte Zahlen enthalten (nur diese Spalte wird ausgewertet)." exit 1 } Abbruch () { for i do echo "$PN: $i" >&2 done exit 1 } set -- `getopt 'f:Hhp:' "$@"` || Hilfetext while [ $# -gt 0 ] do case "$1" in -f) # Datei angegeben. Bei '-' wird von stdin gelesen. # Da die Datei evtl. mehrmals gelesen wird, vorher kopieren cat "$2" > "$Tmp" || Abbruch "Datei $2 kann nicht kopiert werden!" UserFile=ja shift;; -H) Header=ja;; -p) Min="$2"; shift case "$Min" in [0-9]*) ;; # scheint eine Zahl zu sein *) Abbruch "mit -p eine Zahl zwischen 0 und 100 angeben!" esac ;; --) break;; # Ende der Flags -h|-*) Hilfetext;; esac shift done shift # abschliessendes '--' von getopt # Hilfsdatei auf jeden Fall loeschen trap "rm -f $Tmp; exit 1" 0 trap "exit 1" 1 2 3 15 if [ $UserFile = ja ] then [ $# -gt 0 ] && Abbruch "Beim Parameter -f koennen keine Verzeichnisse angegeben werden" Gesamt=`awk '{s+=$1}; END {print s}' $Tmp` else du "$@" > $Tmp || Abbruch "Fehler beim Erstellen der Hilfsdatei!" \ "(Programm du im Suchpfad? Schreibrechte auf $Tmp?)" # Wenn du ohne, oder mit nur einem Parameter aufgerufen wurde, # steht die Gesamtsumme in der letzten Zeile. Andernfalls muss # sie berechnet werden if [ $# -lt 2 ] then Gesamt=`tail -1 $Tmp | sed 's/^[ ]*\([0-9][0-9]*\).*/\1/'` else Gesamt=`awk '{s+=$1}; END {print s}' $Tmp` fi fi [ $Header = ja ] && echo "Prozent KB Verzeichnis" cat "$Tmp" | awk '{ p=($1*100)/'$Gesamt'; if (p>'$Min') printf "%d\t%s\n", p, $0}' | sort -r -n +1