• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] Ordnergroesse des Inhalts bestimmen

hissshack

Newbie
Ich suche eine Funktion/Skript das mir es ermoeglicht die "Ordnergroesse" des kompletten Ornders zu bestimmen.

filesize file
z. B. ermittelt mir die Filegroesse von file, ich brauche aber die Groesse des bestimmten Ordners mit allen Subodnern und deren Inhalt.

Gib es dazu eine Funktion die mir sowas erledigt >
 

ojkastl

Hacker
Code:
du -h --max-depth=1

spuckt dir die Grösse aller Ordner im momentanen Verzeichnis aus, man könnte dann auch sortieren, schau mal im Konsolenforum.
 

TeXpert

Guru
und wenns ein wenig mehr Eye-Candy sein soll: durep (gibts entweder als fertiges Paket oder bei Google...)
 
OP
H

hissshack

Newbie
passend zum Thema noch:
gibt es zum Befehl du eine passende find Kombination, so dass ich mir alle files und Pfade auflisten kann deren Groesse z.B. 500kB ueberschreiten.

ich hab so was aehnliches gefunden wie
find +n [size] in der manpage man find .. allerdings bring ichs nicht richtig hin
so dass es tut was es soll.
 
Sollte Dateien größer als 500 k ausgeben:
find /tmp/ -size +500k -exec ls -ld {} \;
Dateien kleiner als 500k:
find /tmp/ -size -500k -exec ls -ld {} \;
Dateien mit genau 500k
find /tmp/ -size 500k -exec ls -ld {} \;

Mit Pfaden größer als ein bestimmter Wert würde ich so vorgehen:

find . -type d -exec du -s -k {} \; 2>/dev/null |
awk ' { if ( $1 > 500 ) print }'

Dabei werden Directories allerdings mehrfach gezählt. Das 2>/dev/null sorgt für eine Entsorgung der Fehlermeldungen von nicht lesbaren Directories/files ( z.b. Permission fehlt ).

Wenn ich mal fehlenden Plattenplatz suche gehe ich folgendermaßen vor:
- Als root
- cd /
- du -s -k * | sort -n

Dadurch sehe ich als Ausgabe welches Directory den meisten Platz nimmt.
Und dann weiter...
=> cd "dickes dir" ; du -s -k * | sort -n
=> ...

Irgend wann finde ich dann die Platzfresser...

Haveaniceday

Edit: du -s -k * findet nicht die Dateien/Directories mit "." im Namen... .mozilla wird z.B. übersehen, da "*" nicht die "." Dateien mit anzeigt.
du -s -k .[^.]* zeigt diese an.
 

TeXpert

Guru
als User nutze ich für den Überblick auf meiner Workstation gerne filelight um Platzfresser zu finden, da bekommt man eine sehr schöne Ansicht wie der Platzverbrauch verteilt ist...

und für größen beschränkte Ausgaben kann ich auch nur wieder auf durep hinweisen ;)



Code:
durep -hs 500k
zeigt nur die Verzeichnisse, die mehr als 500k beinhalten.. (man durep erzählt noch viel mehr...)
 
OP
H

hissshack

Newbie
danke fuer eure Anworten ... damit koennte ich das Problem loesen.
Es laeuft einwandfrei.

Ich blaube mein allgemeines Problem ist immer noch
verschiedene Befehlskombinationen zu verstehen, anzuwenden
und zu kombinieren.
Z.B.

find . -type d -exec du -s -k {} \; 2>/dev/null |
awk ' { if ( $1 > 500 ) print }'

und

find /tmp/ -size +500k -exec ls -ld {} \;

da einmal find mit . und einem /tmp/ usw., ausserdem weiss ich auch nciht was das awk zu bedeuten hat.
Da scheiterts wohl noch an der Uebung, naja, die Zeit und
Erfahrung wirds schon richten.

Ne Befehleliste hab ich zwar, das Problem ist die Syntax und
der en Kombinationen.
 
No Problem mit Erklärungen:

find <pfadwofindarbeitensoll> -type d -exec <Kommando, in {} wird der gefundene Namen übergeben > \;

\; wird genutzt um das Ende des Kommandos ( auszuführen von find ) festzulegen.

2>/dev/null

Unter UNIX ist: 0 "stdin" also Standardeingabe, 1 "stdout" also Standardout und 2 "stderr"
d.h. der Ausgabekanal für Fehler.

2>/dev/null leitet in der bash den Fehlerkanal in den "Mülleimer" /dev/null. /dev/null ist ein "Dummyziel".

Das "|" kombiniert Programme ( stdout von vor "|" in stdin des Programmes hinter "|" )

In meinem Beispiel nutze ich, das ein "nächste Zeile" nach einem "|" nicht beachtet wird.
awk ist ein _absolut_ nützliches Tool unter UNIX/Linux um Text/Stringverarbeitung zu machen. Vorteil gegenüber "perl" etc: ist auf jedem UNIX-system und hat eine Shell/C ähnliche Syntax.

cat eingabe | awk ' programm' schickt den Inhalt der Datei "eingabe" and das awk-Programm "programm"
Ein "awk" Programm sieht ungefähr so aus:
' BEGIN { machamanfang=0 }
{ if ( $1 > 500 )
print $0
}
END { macheamende=2 }'

In awk-Programmen ist die "ganze Eingabezeile" $0 , der erste Wert der Kommandozeile $1, zweite Wert: $2 ,etc.
( Achtung, das awk Programm in ' ' und nicht in "" einschliessen, sonst werden $0,$1 von der bash/shell schon _vor_ dem Aufruf von awk verändert.

Am Besten findest du aber die Erklärungen über "man <befehlsname>" oder "info <befehlsname>" , wobei "info" recht seltsam zu bedienen ist.
Es macht sinn, wenn du erst dort kräftig liest bevor du Fragen stellst, die dort z.B. als Beispiel erklärt sind.

Viele Grüße,

Haveaniceday
 
Oben