Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

[solved] Ordnergroesse des Inhalts bestimmen

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
hissshack
Newbie
Newbie
Beiträge: 21
Registriert: 9. Aug 2005, 16:32

[solved] Ordnergroesse des Inhalts bestimmen

Beitrag von hissshack »

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 >
Zuletzt geändert von hissshack am 19. Sep 2005, 22:08, insgesamt 1-mal geändert.
Bin blutiger Anfänger ... also sorry für dumme Fragen ... 8)
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

probiere mal "du".
==> siehe man du für die Parameter

grafisch geht das mit kdirstat
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
ojkastl
Hacker
Hacker
Beiträge: 547
Registriert: 15. Dez 2004, 04:51
Wohnort: Erlangen
Kontaktdaten:

Beitrag von ojkastl »

Code: Alles auswählen

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.
hissshack
Newbie
Newbie
Beiträge: 21
Registriert: 9. Aug 2005, 16:32

Beitrag von hissshack »

hi,
danke ihr beiden.

du -s

hab ich gesucht :wink:
Bin blutiger Anfänger ... also sorry für dumme Fragen ... 8)
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

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

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
hissshack
Newbie
Newbie
Beiträge: 21
Registriert: 9. Aug 2005, 16:32

Beitrag von hissshack »

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.
Bin blutiger Anfänger ... also sorry für dumme Fragen ... 8)
Benutzeravatar
haveaniceday
Hacker
Hacker
Beiträge: 775
Registriert: 7. Jul 2004, 14:09
Wohnort: Paderborn

Beitrag von haveaniceday »

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.
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

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: Alles auswählen

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

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
hissshack
Newbie
Newbie
Beiträge: 21
Registriert: 9. Aug 2005, 16:32

Beitrag von hissshack »

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.
Bin blutiger Anfänger ... also sorry für dumme Fragen ... 8)
Benutzeravatar
haveaniceday
Hacker
Hacker
Beiträge: 775
Registriert: 7. Jul 2004, 14:09
Wohnort: Paderborn

Beitrag von haveaniceday »

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
Antworten