Script zur Auflistung der Ordnersturkturgröße
Script zur Auflistung der Ordnersturkturgröße
hi @ all,
ich bräuchte ein script was in einem bestimmten ordner alle unterordner auflistet +ihre größe und dateienanzahl
hat da jemand ne gute idee wie man das realisieren könnte?
DANKE
gruß dave
ich bräuchte ein script was in einem bestimmten ordner alle unterordner auflistet +ihre größe und dateienanzahl
hat da jemand ne gute idee wie man das realisieren könnte?
DANKE
gruß dave
Re: Script zur Auflistung der Ordnersturkturgröße
ähnlich wie hier:
http://debianforum.de/forum/viewtopic.php?f=34&t=116214
http://debianforum.de/forum/viewtopic.php?f=34&t=116214
Code: Alles auswählen
man ls
man wc
Re: Script zur Auflistung der Ordnersturkturgröße
Ich sehe keinen Zusammenhang zu diesem Thread. Falscher Link?hikaru hat geschrieben:ähnlich wie hier:
http://debianforum.de/forum/viewtopic.php?f=34&t=116214
Ansatz:
Code: Alles auswählen
for i in * ; do
echo $i
du -sh $i
find $i | wc -l
done
Use ed once in a while!
Re: Script zur Auflistung der Ordnersturkturgröße
Sorry Meillo, aber das muß jetzt sein.
Und den Find Process kannst Du dir auch noch sparen, ungefährt so (nur rudimentär getestet):
Grüße,
Christian
Das matcht nicht auf unsichtbare Dateien/Verzeichnisse also /nicht/ auf z.B. .kde, .mozilla, etc.Meillo hat geschrieben:Code: Alles auswählen
for i in * ; do
Variablen *immer* quoten. also echo "$i", du -sh "$i", find "$i", ansonsten fällt Dir das nämlich genau dann auf die Füssen wenn du das nicht erwartest, bei ekligen Dateinamen zum Beispiel.Meillo hat geschrieben:Code: Alles auswählen
echo $i du -sh $i find $i | wc -l done
Und den Find Process kannst Du dir auch noch sparen, ungefährt so (nur rudimentär getestet):
Code: Alles auswählen
find . -type d -execdir bash -c 'shopt -s extglob; du -sh "$1"; printf "%s\n" "$1"/*|wc -l ' find-sh '{}' \;
Christian
Meine Whishlist
:wq!
:wq!
Re: Script zur Auflistung der Ordnersturkturgröße
Nein, der Link ist korrekt. Ich vermute, dass bei OnkelDave ein wenig Erfahrung im Umgang mit Shell-Komandos bzw. dem Verwenden der man-Pages fehlt. Daher der Verweis auf die manpages von wc und ls*.Meillo hat geschrieben:Ich sehe keinen Zusammenhang zu diesem Thread. Falscher Link?
*) Meine Musterlösung hätte ähnlich ausgesehen wie deine, nur dass ich statt mit echo und du mit ls gearbeitet hätte.
Re: Script zur Auflistung der Ordnersturkturgröße
also erstmal dickes DANKE!!!!
Wenn so ein konkurenzkampf besteht ist das ergebnis immer besser...
DANKE ihr gurus
p.s. könnte man die ausgabe, vielleicht etwas anders gestalten?
son bischen tabellenhafter....
anzahl____größe____pfad
117______2gb______/etc/beispiel
wenn das möglich wäre, das wär so cool!
und weiß noch jemand zufällig wie man das ganze dann in cron realisieren kann, sodass einem diese liste per mail zu gesendet wird oder einfach auf eine htmlseite geniert wird mit verlauf der einzelnen tage????
DANKE nochmals!
grüße dave
Wenn so ein konkurenzkampf besteht ist das ergebnis immer besser...
DANKE ihr gurus
p.s. könnte man die ausgabe, vielleicht etwas anders gestalten?
son bischen tabellenhafter....
anzahl____größe____pfad
117______2gb______/etc/beispiel
wenn das möglich wäre, das wär so cool!
und weiß noch jemand zufällig wie man das ganze dann in cron realisieren kann, sodass einem diese liste per mail zu gesendet wird oder einfach auf eine htmlseite geniert wird mit verlauf der einzelnen tage????
DANKE nochmals!
grüße dave
Re: Script zur Auflistung der Ordnersturkturgröße
oder besser:
das script soll das einfach jeden tag machen...das könnt ich ja mit cron realisieren (crontab)
und in eine datei schreiben die mit dem datum benannt wird.
also ich mach mal den anfang....*verkneift euch ja das lachen *
Wenn mir da jemand helfen koennte waer ich ihm zu grossen dank verpflichtet!
gruesse dave
das script soll das einfach jeden tag machen...das könnt ich ja mit cron realisieren (crontab)
und in eine datei schreiben die mit dem datum benannt wird.
also ich mach mal den anfang....*verkneift euch ja das lachen *
Code: Alles auswählen
#/bin/sh
find . -type d -execdir bash -c 'shopt -s extglob; du -sh "$1"; printf "%s\n" "$1"/*|wc -l ' find-sh '{}' \;
Wenn mir da jemand helfen koennte waer ich ihm zu grossen dank verpflichtet!
gruesse dave
Re: Script zur Auflistung der Ordnersturkturgröße
Es war nur ein Ansatz. Man muss halt `for i in * .* ; do' draus machen, dann hat man auch versteckte Dateien dabei.chrisbra hat geschrieben:Das matcht nicht auf unsichtbare Dateien/Verzeichnisse also /nicht/ auf z.B. .kde, .mozilla, etc.Meillo hat geschrieben:Code: Alles auswählen
for i in * ; do
Mir ist das sehr wohl bewusst.Variablen *immer* quoten. also echo "$i", du -sh "$i", find "$i", ansonsten fällt Dir das nämlich genau dann auf die Füssen wenn du das nicht erwartest, bei ekligen Dateinamen zum Beispiel.
Ich habe obigen Code nur mal kurz hingetippt. Das sollte kein Produktivcode sein (vgl. Hinweis: ``Ansatz''). Deshalb ist die Ausgabe z.B. auch nicht auf einer Zeile pro Datei formatiert. Ich fand es halt besser als ``bash(1), ls(1), wc(1), du(1), find(1)'' hinzuschreiben.
printf(1) ist was du lesen willst. (Das heißt die Manpage zu dem *Befehl* printf, für die die diese Notation nicht kennen.)OnkelDave hat geschrieben:p.s. könnte man die ausgabe, vielleicht etwas anders gestalten?
son bischen tabellenhafter....
anzahl____größe____pfad
117______2gb______/etc/beispiel
Nun mit `crontab -e' sowas eintragen:OnkelDave hat geschrieben:Code: Alles auswählen
#/bin/sh find . -type d -execdir bash -c 'shopt -s extglob; du -sh "$1"; printf "%s\n" "$1"/*|wc -l ' find-sh '{}' \;
Code: Alles auswählen
/pfad/zu/deinem/script | mail OnkelDave@localhost
Use ed once in a while!
Re: Script zur Auflistung der Ordnersturkturgröße
OnkelDave hat geschrieben:also ich mach mal den anfang....*verkneift euch ja das lachen *
Code: Alles auswählen
#/bin/sh find . -type d -execdir bash -c 'shopt -s extglob; du -sh "$1"; printf "%s\n" "$1"/*|wc -l ' find-sh '{}' \;
Wenn mir da jemand helfen koennte waer ich ihm zu grossen dank verpflichtet!
Also ich hab mal ein kleines Script daraus gemacht:
Code: Alles auswählen
#!/bin/bash
printf "Dateien\tGröße\tVerzeichnis\n"
find "$1" -type d -execdir bash -c '
shopt -s extglob;
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 '{}' \;
MAILTO=dave@localhost
@daily /home/dave/bin/du.sh /
und dann bekommst Du täglich eine Mail an dave@localhost mit den Ergebnissen.
Disclaimer: Immer noch größtenteils ungetestet.
Meine Whishlist
:wq!
:wq!
Re: Script zur Auflistung der Ordnersturkturgröße
Deshalb nehm ich immer find. Dort kann man das besser steuern und es ist robuster.Meillo hat geschrieben: Es war nur ein Ansatz. Man muss halt `for i in * .* ; do' draus machen, dann hat man auch versteckte Dateien dabei.
printf ist in diesem Fall ein Shell builtin. Aber der sollte eigentlich das gleiche machen, wie printf(1)Meillo hat geschrieben: printf(1) ist was du lesen willst. (Das heißt die Manpage zu dem *Befehl* printf, für die die diese Notation nicht kennen.)
Meine Whishlist
:wq!
:wq!
Re: Script zur Auflistung der Ordnersturkturgröße
Es ist natürlich Ansichtssache. Ich finde find recht komplex im Vergleich zu einer for-Schleife wenn man nur eine Ebene tief braucht.chrisbra hat geschrieben:Deshalb nehm ich immer find. Dort kann man das besser steuern und es ist robuster.Meillo hat geschrieben: Es war nur ein Ansatz. Man muss halt `for i in * .* ; do' draus machen, dann hat man auch versteckte Dateien dabei.
Aber: Sind denn nur alle Unterordner der ersten Ebene gewünscht, oder alle Ordner unterhalb des aktuellen? chrisbras find macht, soweit ich sehe, zweiteres, mein for dagegen ersteres.
Ich wollte mir jetzt mal chrisbras Zeile vornehmen. Nur habe ich kein `find-sh'. Ist das ein Programm?
Use ed once in a while!
Re: Script zur Auflistung der Ordnersturkturgröße
Gewöhnungssache. Wenn man die paar Parameter kennt (-maxdepth 1 -mindepth 1) dann geht das schon. Früher [tm] hab ich auch immer for Schleifen für alles mögliche genommen, aber irgendwann merkt man, dass man mit find robuster und flexibler ist.Meillo hat geschrieben:Es ist natürlich Ansichtssache. Ich finde find recht komplex im Vergleich zu einer for-Schleife wenn man nur eine Ebene tief braucht.chrisbra hat geschrieben: Deshalb nehm ich immer find. Dort kann man das besser steuern und es ist robuster.
Ach das, damit setzt Du $0 deines Programmes. Das ist irgendein Name und muß kein Programm sein. Die eigentlichen Argumente stehen dann ab $1 zur Verfügung. Das kommst soweit ich weiß von der exec-Systemcalls. Aus man 3 exec:Meillo hat geschrieben: Ich wollte mir jetzt mal chrisbras Zeile vornehmen. Nur habe ich kein `find-sh'. Ist das ein Programm?
Und da die Argumente immer bei $0 anfangen, muß halt als erstes irgendein Wert stehen.The execv() and execvp() functions provide an array of pointers to
null-terminated strings that represent the argument list available to the new
program. The first argument, by convention, should point to the filename
associated with the file being executed. The array of pointers must be
terminated by a NULL pointer.
Meine Whishlist
:wq!
:wq!
Re: Script zur Auflistung der Ordnersturkturgröße
Ahh. Jetzt ist der Sinn dahinter klar geworden. (Der Fehler den ich erhalten hatte muss am Kopieren gelegen haben. Nachdem ich den Befehl abgetippt habe funktioniert er auch.)chrisbra hat geschrieben:Ach das, damit setzt Du $0 deines Programmes. Das ist irgendein Name und muß kein Programm sein. Die eigentlichen Argumente stehen dann ab $1 zur Verfügung.Meillo hat geschrieben: Ich wollte mir jetzt mal chrisbras Zeile vornehmen. Nur habe ich kein `find-sh'. Ist das ein Programm?
Code: Alles auswählen
find . -type d -execdir bash -c 'shopt -s extglob; du -sh "$1"; printf "%s\n" "$1"/*|wc -l ' find-sh '{}' \;
Code: Alles auswählen
find . -type d -execdir bash -c 'shopt -s extglob; du -sh "$1"; ls "$1" | wc -l' find-sh '{}' \;
Use ed once in a while!
Re: Script zur Auflistung der Ordnersturkturgröße
shell-interner builtin. Vermeidet den Aufruf eines externen Commands.Meillo hat geschrieben:Gibt es denn einen Grund für das printf?Code: Alles auswählen
find . -type d -execdir bash -c 'shopt -s extglob; du -sh "$1"; printf "%s\n" "$1"/*|wc -l ' find-sh '{}' \;
ARGL. Das sollte mal dotglob heißen. *grml*Meillo hat geschrieben: Und weshalb setzst du extglob?
Danke fürs Augenöffnen.
Mit dotglob werden mit * auch dot-files der Shell expandiert, so dass printf "%s\n" foobar/* auch deine .bashrc expandiert.
Ích spar mir halt den Aufruf des binary ls und lass die shell expandieren. Spart RessourcenMeillo hat geschrieben: Ich würde es so machen:Code: Alles auswählen
find . -type d -execdir bash -c 'shopt -s extglob; du -sh "$1"; ls "$1" | wc -l' find-sh '{}' \;
Meine Whishlist
:wq!
:wq!
Re: Script zur Auflistung der Ordnersturkturgröße
chrisbra hat geschrieben:shell-interner builtin. Vermeidet den Aufruf eines externen Commands.Meillo hat geschrieben: Gibt es denn einen Grund für das printf?
Das erklärt warum ich mich wundere. Denn ich vermeide es so gut es geht an Ressourcen-Optimierungen zu denken.Ich spar mir halt den Aufruf des binary ls und lass die shell expandieren. Spart Ressourcen
(... und Shellbuiltins sind (bis auf wenige Ausnahmen) IMO sowieso böse. )
Use ed once in a while!
Re: Script zur Auflistung der Ordnersturkturgröße
Wieso? Es ist robuster. Bei Aufruf eines externen Commands macht die Shell immer noch word splitting und dabei gehen Dir im Zweifel die Argumente kaputt. Sowas vermeide ich wenn möglich.Meillo hat geschrieben:(... und Shellbuiltins sind (bis auf wenige Ausnahmen) IMO sowieso böse. )
Meine Whishlist
:wq!
:wq!
Re: Script zur Auflistung der Ordnersturkturgröße
Builtins sorgen dafür, dass Code verdoppelt wird (einmal für's Builtin und einmal für's externe Kommando). Zudem steigt die Komplexität der Shell. Wenn es um steigende Komplexität geht braucht man schon seht gute Gründe um mich zu überzeugen.
Das für mich beeindruckendste an Unix ist, dass die an sich komplexe Aufgabe Betriebssystemdesign mit unglaublich wenig Komplexität gemeistert wurde.
Für mich kommt zuerst die Designsicht, danach erst die Benutzersicht.
(Wir werden uns hierbei kaum einig werden ... müssen wir auch nicht. Dass find mächtig ist weiß ich, dennoch staune ich immer wieder was man wie damit machen kann. Deine Codezeilen waren nicht übel. Doch mein Stil ist das halt nicht.)
Das für mich beeindruckendste an Unix ist, dass die an sich komplexe Aufgabe Betriebssystemdesign mit unglaublich wenig Komplexität gemeistert wurde.
Für mich kommt zuerst die Designsicht, danach erst die Benutzersicht.
(Wir werden uns hierbei kaum einig werden ... müssen wir auch nicht. Dass find mächtig ist weiß ich, dennoch staune ich immer wieder was man wie damit machen kann. Deine Codezeilen waren nicht übel. Doch mein Stil ist das halt nicht.)
Use ed once in a while!
Re: Script zur Auflistung der Ordnersturkturgröße
Okay, ist eine andere Philosphie. Ich vermeide auch wenn es geht, unportable Sachen/Bashisms, aber nutze auch die vorhandenen Möglichkeiten möglichst effektiv. Deshalb nutze ich auch Vim, obwohl ich versuche, ihn nicht zu sehr zu konfigurieren, damit ich im Zweifel auch mit nvi, oder ex oder auch ed bzw. sed noch klar komme. Oder bash, weil tab-completion ist schon nett, bei Scripten versuche ich aber möglichst portabel zu bleiben, wenn es geht.Meillo hat geschrieben:Builtins sorgen dafür, dass Code verdoppelt wird (einmal für's Builtin und einmal für's externe Kommando). Zudem steigt die Komplexität der Shell. Wenn es um steigende Komplexität geht braucht man schon seht gute Gründe um mich zu überzeugen.
Das für mich beeindruckendste an Unix ist, dass die an sich komplexe Aufgabe Betriebssystemdesign mit unglaublich wenig Komplexität gemeistert wurde.
Für mich kommt zuerst die Designsicht, danach erst die Benutzersicht.
(Wir werden uns hierbei kaum einig werden ... müssen wir auch nicht. Dass find mächtig ist weiß ich, dennoch staune ich immer wieder was man wie damit machen kann. Deine Codezeilen waren nicht übel. Doch mein Stil ist das halt nicht.)
Meine Whishlist
:wq!
:wq!
Re: Script zur Auflistung der Ordnersturkturgröße
moin danke nochmal für die vielen und schnellen antworten...
das ufert ja richtig zu einer tiefgründigen diskusion aus
@ chrisbra
hab dein script mal getestet, gibt leider noch einen fehler aus
fehler:
root@railsbitch:/mnt/lafourmi/vpn# sh strukturliste3.sh
Dateien Gr��e Verzeichnis
find: cannot search "": Datei oder Verzeichnis nicht gefunden
root@railsbitch:/mnt/lafourmi/vpn#
ABER im prinzip wär das genau das was ich brauche!
könnte das jemand mal schnell verbessern, ich weiß leider nicht bzw seh nicht woran es hapert!
Ein Großes Dank nochmal an Dich chris und natürlich auch an alle anderen!!!
gruß dave
das ufert ja richtig zu einer tiefgründigen diskusion aus
@ chrisbra
hab dein script mal getestet, gibt leider noch einen fehler aus
Code: Alles auswählen
#!/bin/bash
printf "Dateien\tGröße\tVerzeichnis\n"
find "$1" -type d -execdir bash -c '
shopt -s extglob;
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 '{}' \;
root@railsbitch:/mnt/lafourmi/vpn# sh strukturliste3.sh
Dateien Gr��e Verzeichnis
find: cannot search "": Datei oder Verzeichnis nicht gefunden
root@railsbitch:/mnt/lafourmi/vpn#
ABER im prinzip wär das genau das was ich brauche!
könnte das jemand mal schnell verbessern, ich weiß leider nicht bzw seh nicht woran es hapert!
Ein Großes Dank nochmal an Dich chris und natürlich auch an alle anderen!!!
gruß dave
Re: Script zur Auflistung der Ordnersturkturgröße
Jo, kann man noch was von lernenOnkelDave hat geschrieben:moin danke nochmal für die vielen und schnellen antworten...
das ufert ja richtig zu einer tiefgründigen diskusion aus
Mach mal aus dem extglob ein dotglob. Das sorgt dafür, dass auch versteckte Dateien gezählt werden.hab dein script mal getestet, gibt leider noch einen fehler aus
Code: Alles auswählen
#!/bin/bash printf "Dateien\tGröße\tVerzeichnis\n" find "$1" -type d -execdir bash -c ' shopt -s extglob; 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 '{}' \;
Und ruf das Script mit einem Verzeichnisnamen auf. Hier die verbesserte Version, die die Anzahl der Argumente prüft:
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 '{}' \;
Christian
Zuletzt geändert von Meillo am 03.12.2009 20:46:24, insgesamt 1-mal geändert.
Grund: Überzähligen Tag entfernt
Grund: Überzähligen Tag entfernt
Meine Whishlist
:wq!
:wq!
Re: Script zur Auflistung der Ordnersturkturgröße
moinsen,
erstmal DANKE chris!!!
kann dein scripte aber leider nicht ausführen!!!
unexpected end of file in zeile 14 ???????
geht das den bei dir?
führe das so aus, vielleicht liegt es ja daran??
sh strukturliste.sh
..und dann halt error unexpected......
erstmal DANKE chris!!!
kann dein scripte aber leider nicht ausführen!!!
unexpected end of file in zeile 14 ???????
geht das den bei dir?
führe das so aus, vielleicht liegt es ja daran??
sh strukturliste.sh
..und dann halt error unexpected......
Re: Script zur Auflistung der Ordnersturkturgröße
Bei mir läuft's problemlos. Vermutlich ist bei dir irgendwo ein Anführungszeichen falsch.OnkelDave hat geschrieben:kann dein scripte aber leider nicht ausführen!!!
unexpected end of file in zeile 14 ???????
Use ed once in a while!
Re: Script zur Auflistung der Ordnersturkturgröße
Den Fehler bekomme ich nicht. Überprüfe bitte mal alle Anführungszeichen oder poste deinen Code irgendwo.OnkelDave hat geschrieben: unexpected end of file in zeile 14 ???????
geht das den bei dir?
Meine Whishlist
:wq!
:wq!
Re: Script zur Auflistung der Ordnersturkturgröße
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 '{}' \;
moin chris,
genau so wie es hier steht, hab ich es unter einem sh file gespeichert unter debian lenny und es probiert mit sh filename.sh zu starten und es kommt
unexpected end of file???
könnte es vielleicht noch jemand anders mal kurz NUR ausprobieren, ob er den gleichen fehler bekommt! hab keine ahnung woran es liegen könnte????
danke gruß dave
Re: Script zur Auflistung der Ordnersturkturgröße
juhu!!!
danke chris...du hattest mich so nachdenklich gemacht
habs mit ultraedit editiert und unter unix codierung gespeichert....jetzt funzt es wunderbar!!!
SUPER ARBEIT MY FRIEND!!!
danke chris...du hattest mich so nachdenklich gemacht
habs mit ultraedit editiert und unter unix codierung gespeichert....jetzt funzt es wunderbar!!!
SUPER ARBEIT MY FRIEND!!!