Script zur Auflistung der Ordnersturkturgröße

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Script zur Auflistung der Ordnersturkturgröße

Beitrag von Meillo » 07.12.2009 13:17:41

Thread geteilt, weil: Neue Frage -> neuer Thread.

Die andere Frage ist dort: http://debianforum.de/forum/viewtopic.php?f=8&t=116375
Use ed once in a while!

OnkelDave
Beiträge: 231
Registriert: 30.11.2009 16:21:13

Re: Script zur Auflistung der Ordnersturkturgröße

Beitrag von OnkelDave » 10.12.2009 09:51:22

Code: Alles auswählen

#!/bin/bash
if [ "$#" -ne 1 ]; then
   echo "Aufruf: `basename $0`  <Verzeichnis>"
   exit 2
fi
printf "Dateien\tGröße\tVerzeichnis\n"
find "$1" -type d -execdir bash -c '
shopt -s dotglob;
dir=`readlink -f "$PWD/$1"`
size=`du -s "$1"|cut -f1`;
files=`printf "%s\n" "$1"/*|grep -v [*]|wc -l`
printf "%02d\t%s\t%s\n" "$files" "$size" "$dir"
' find-sh '{}' \;

wie kann man verhindern, das er die unterverzeichnisse mit ausgibt???

danke schonmal ;)

gruß dave

chrisbra
Beiträge: 122
Registriert: 19.10.2005 09:36:09
Wohnort: Sachsen-Anhalt
Kontaktdaten:

Re: Script zur Auflistung der Ordnersturkturgröße

Beitrag von chrisbra » 10.12.2009 10:23:06

OnkelDave hat geschrieben: wie kann man verhindern, das er die unterverzeichnisse mit ausgibt???

danke schonmal ;)
Hm, das Script soll nicht rekursiv durchsuchen? Dann könnte man den kompletten find-Aufruf rauswerfen. Quasi sowas hier:

Code: Alles auswählen

#!/bin/bash
if [ "$#" -ne 1 ]; then
   echo "Aufruf: `basename $0`  <Verzeichnis>"
   exit 2
fi
shopt -s dotglob;
printf "Dateien\tGröße\tVerzeichnis\n"
dir=`readlink -f "$PWD/$1"`
size=`du -s "$1"|cut -f1`;
files=`printf "%s\n" "$1"/*|grep -v [*]|wc -l`
printf "%02d\t%s\t%s\n" "$files" "$size" "$dir"
Meine Whishlist
:wq!

OnkelDave
Beiträge: 231
Registriert: 30.11.2009 16:21:13

Re: Script zur Auflistung der Ordnersturkturgröße

Beitrag von OnkelDave » 10.12.2009 10:45:26

moinsen,
also er soll schon alle ordner anzeigen die sich im verzeichniss befinden, nur nicht deren unterordner ausgeben...
könntest du nochmal so lieb sein und das ein wenig modifizieren?
langsam wird nen bier fällig ;)

gruß dave

chrisbra
Beiträge: 122
Registriert: 19.10.2005 09:36:09
Wohnort: Sachsen-Anhalt
Kontaktdaten:

Re: Script zur Auflistung der Ordnersturkturgröße

Beitrag von chrisbra » 10.12.2009 14:19:58

OnkelDave hat geschrieben:moinsen,
also er soll schon alle ordner anzeigen die sich im verzeichniss befinden, nur nicht deren unterordner ausgeben...
könntest du nochmal so lieb sein und das ein wenig modifizieren?
langsam wird nen bier fällig ;)

gruß dave
Nur kurz, weil keine Zeit:

Code: Alles auswählen

#!/bin/bash
if [ "$#" -ne 1 ]; then
   echo "Aufruf: `basename $0`  <Verzeichnis>"
   exit 2
fi
printf "Dateien\tGröße\tVerzeichnis\n"

find "$1" -maxdepth 1 -type d -execdir bash -c '
shopt -s dotglob;
dir=`readlink -f "$1"`
size=`du -s "$1"|cut -f1`;
files=`printf "%s\n" "$1"/"$i"/*|grep -v [*]|wc -l`
printf "%02d\t%s\t%s\n" "$files" "$size" "$dir"
' find-sh '{}' \;
Meine Whishlist
:wq!

OnkelDave
Beiträge: 231
Registriert: 30.11.2009 16:21:13

Re: Script zur Auflistung der Ordnersturkturgröße

Beitrag von OnkelDave » 10.12.2009 17:04:32

ok jetzt hab ich nen echtes problem...
der befehl find, dauert ewig um 16tb durchzugehen...das script arbeitet so leider nicht korrekt :(
also die ausgabe in ein log file via cron gibt nix aus, wenn ich einen anderen ort wähle - der nicht ganz so groß ist, funktioniert es bestens!

könnte mir das jemand umschreiben, bin leider kein unix shell pro, was auf den befehl du -h bassiert.....damit läuft es einigermaßen schneller ;)

danke im vorraus für eure power hilfe! ganz besonders meillo mein bester!

gruß david


----------------------------

ok jetzt kommt der burner, das sind sooo viele dateien und die größe lassen wir mal außenvor ;)
jetzt kommen langsam aber sicher die einträge von dem script.....leider erst 50minuten danach :D
dann widerruf ich mich und sag alles in ordnung, wenn es jetzt eine möglichkeit gibt cron zu sagen, dass er es erst 2 h später per mail versenden soll oder am besten warten soll bis das script durchgelaufen ist!

und was auch noch super wäre, wenn er das datum mit in den dateinamen des logs schreibt, damit er es nächsten tag nicht überschreibt.

gibs da eine möglichkeit??????

DANKE SCHONMAL

chrisbra
Beiträge: 122
Registriert: 19.10.2005 09:36:09
Wohnort: Sachsen-Anhalt
Kontaktdaten:

Re: Script zur Auflistung der Ordnersturkturgröße

Beitrag von chrisbra » 10.12.2009 21:22:19

OnkelDave hat geschrieben:ok jetzt hab ich nen echtes problem...
der befehl find, dauert ewig um 16tb durchzugehen...das script arbeitet so leider nicht korrekt :(
also die ausgabe in ein log file via cron gibt nix aus, wenn ich einen anderen ort wähle - der nicht ganz so groß ist, funktioniert es bestens!
ok, 16tb sind schon heftig. Das kann natürlich dauern, das zählen und summieren, abhängig auch davon, ob du eher viele kleine oder weniger große Dateien hast. Hier mal eine Version, die sich den find-Aufruf spart:

Code: Alles auswählen

#!/bin/bash

if [ "$#" -ne 1 ]; then
   echo "Aufruf: `basename $0`  <Verzeichnis>"
   exit 2
fi

shopt -s nullglob;
shopt -s dotglob;

j=1
for i in "$1"/*; do
        if [ $j -eq 1 ]; then
                printf "Dateien\tGröße\tVerzeichnis\n"
        fi
        j=$(( $j + 1 ))
        size=`du -sb "$i"`
        files=`printf "%s\n" "$i"/*|wc -l`
        printf "%02d\t%s\n" "$files" "$size"
done
Das sollte etwas schneller sein.
könnte mir das jemand umschreiben, bin leider kein unix shell pro, was auf den befehl du -h bassiert.....damit läuft es einigermaßen schneller ;)
Tja, ist i/o-bound. Da wirst Du mit shell nicht viel machen können.
ok jetzt kommt der burner, das sind sooo viele dateien und die größe lassen wir mal außenvor ;)
jetzt kommen langsam aber sicher die einträge von dem script.....leider erst 50minuten danach :D
dann widerruf ich mich und sag alles in ordnung, wenn es jetzt eine möglichkeit gibt cron zu sagen, dass er es erst 2 h später per mail versenden soll oder am besten warten soll bis das script durchgelaufen ist!
Cron müßte doch mit dem output warten, bis alles fertig ist, oder läuft mail da in einen Timeout?
und was auch noch super wäre, wenn er das datum mit in den dateinamen des logs schreibt, damit er es nächsten tag nicht überschreibt.

gibs da eine möglichkeit??????
Wie ruftst Du das Script auf? und in welchem Format hättest Du denn das Datum gern im Logfile?
Meine Whishlist
:wq!

OnkelDave
Beiträge: 231
Registriert: 30.11.2009 16:21:13

Re: Script zur Auflistung der Ordnersturkturgröße

Beitrag von OnkelDave » 11.12.2009 12:50:17

EH einfach Spitze!
DANKE schonmal!

Die mails laufen in ein Timeout bzw werden in dem Fall leer verschickt :)

Das Datumformat ist echt egal, nur damit die LogFiles sich nicht überschreiben und man sie zuordnen kann...

Grüße DAvid

chrisbra
Beiträge: 122
Registriert: 19.10.2005 09:36:09
Wohnort: Sachsen-Anhalt
Kontaktdaten:

Re: Script zur Auflistung der Ordnersturkturgröße

Beitrag von chrisbra » 12.12.2009 14:41:07

OnkelDave hat geschrieben: Das Datumformat ist echt egal, nur damit die LogFiles sich nicht überschreiben und man sie zuordnen kann...
In deinem Aufruf des Scripts, machst Du ja wahrscheinlich sowas:

script.sh > logfile

Das änderst Du in

script.sh > logfile_`date +'%Y%m%d'`

Achtung ` sind Backtickes und keine normalen Apostrophen Zeichen.
Meine Whishlist
:wq!

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: Script zur Auflistung der Ordnersturkturgröße

Beitrag von Liffi » 12.12.2009 20:39:55

chrisbra hat geschrieben: Achtung ` sind Backtickes und keine normalen Apostrophen Zeichen.
Deshalb lieber $() benutzen. Siehe auch hier.

OnkelDave
Beiträge: 231
Registriert: 30.11.2009 16:21:13

Re: Script zur Auflistung der Ordnersturkturgröße

Beitrag von OnkelDave » 30.12.2009 12:34:47

hallo,
könnte mir einer erklären was ich ändern müsste für eine Gigabyte anzeige und keine Byte ;)

Code: Alles auswählen

    #!/bin/bash

    if [ "$#" -ne 1 ]; then
       echo "Aufruf: `basename $0`  <Verzeichnis>"
       exit 2
    fi

    shopt -s nullglob;
    shopt -s dotglob;

    j=1
    for i in "$1"/*; do
            if [ $j -eq 1 ]; then
                    printf "Dateien\tGröße\tVerzeichnis\n"
            fi
            j=$(( $j + 1 ))
            size=`du -sb "$i"`
            files=`printf "%s\n" "$i"/*|wc -l`
            printf "%02d\t%s\n" "$files" "$size"
    done
so ist es einfach bei meheren Terrabytes eine zu lange zahl :)

DANKE im vorraus
GRÜßE dave

OnkelDave
Beiträge: 231
Registriert: 30.11.2009 16:21:13

Re: Script zur Auflistung der Ordnersturkturgröße

Beitrag von OnkelDave » 30.12.2009 13:02:23

ach da fällt mir doch was ein.....du -sh ist es...hab ich recht?
sitz hier an einem doofi system ;) nix unix shell :(
DANKE

mullers

Re: Script zur Auflistung der Ordnersturkturgröße

Beitrag von mullers » 30.12.2009 13:03:04

Code: Alles auswählen

      -h, --human-readable
              Ausgabe der Größen in menschenlesbarem Format.  (z.B. 1K 234M 2G)
Gruesse
henry

Antworten