Größe der Ordner einer Variablen zuweisen

  • Ersteller peter.goesswein
  • Erstellt am
P

peter.goesswein

Grünschnabel
Hallo!

Ich habe gerade mit Shell-Skripting angefangen und über ein wenig mit diversen Beispielen.

Derzeit versuche ich gerade, die Größe der Verzeichnisse einer Variablen zuzuweisen - diese Verzeichnise sortiere ich vorher und gebe nur die n größen aus.

ich hätte das so gelöst:
b=`du -h $verzeichnis | sort -n | head -n $anzahl`
echo $b

eigentlich funktioniert das schon, aber leider werden mir die verzeichnisse als string ausgegeben - dh. es erfolgt keine Zeilenumbruch zwischen den einzelnen dateien.
wie kann ich das nun machen, dass jede datei in einer neuen zeile steht?

herzlichn dank, mfg peter
 
Hallo,

das geht eigentlich indem du "$b" machst (also mit Anführungszeichen)
Code:
b=`du -h $verzeichnis | sort -n | head -n $anzahl`
echo [color=red]"[/color]$b[color=red]"[/color]

Dann kommt das so raus:
Code:
~/test> ./test.sh
0       ./test1
0       ./test2
0       ./test3
 
loool...so einfach kanns gehen! herzlichen dank :o)
 
beim Testen deines Statements
b=`du -h $verzeichnis | sort -n | head -n $anzahl`
echo "$b"
hast Du mittlerweile bestimmt schon gemerkt, dass Du gewisse "Ungenauigkeiten" (um es nicht "Fehler" zu nennen ;-) hast, oder?


auf einer meiner Linux-Maschinen liefert dein Statement z. B. so was:
Code:
$ verzeichnis=85LATEST
$ anzahl=100
$
$ b=`du -h $verzeichnis | sort -n | head -n $anzahl`
$ echo "$b"
0       85LATEST/java
0       85LATEST/src/cpp
0       85LATEST/src/cpp/protout
2.2M    85LATEST/bat
4.0K    85LATEST/files
4.0K    85LATEST/files/par
4.0K    85LATEST/install/jetform
5.7M    85LATEST/toolsV3
11M     85LATEST/convfile
12M     85LATEST/copy
20K     85LATEST/etc
28M     85LATEST/sql
66M     85LATEST/src
94M     85LATEST/bin
123M    85LATEST/install
225K    85LATEST/install/custom
341M    85LATEST
601K    85LATEST/menu
$

1. falsche Sortierreihenfolge wegen der -h(uman)-Angabe
2. falsche Sortierung, das kleinste Verz. steht vorne, nicht das größte
3. $verzeichnis selbst taucht in der Auflistung auch auf (das ist
aber vielleicht ja auch so gewollt)


so (-h weg, -r(ecursive) dazu, grep dazu) sähe es m. E. schon besser/richtiger aus:
Code:
$ b=`du $verzeichnis | sort -n -r | grep -v "$verzeichnis$" | head -n $anzahl`
$ echo "$b"
125918  85LATEST/install
95387   85LATEST/bin
66982   85LATEST/src
28597   85LATEST/sql
12052   85LATEST/copy
11041   85LATEST/convfile
5773    85LATEST/toolsV3
2185    85LATEST/bat
601     85LATEST/menu
225     85LATEST/install/custom
20      85LATEST/etc
4       85LATEST/install/jetform
4       85LATEST/files/par
4       85LATEST/files
0       85LATEST/src/cpp/protout
0       85LATEST/src/cpp
0       85LATEST/java
$
$ anzahl=4
$ b=`du $verzeichnis | sort -n -r | grep -v "$verzeichnis$" | head -n $anzahl`
$ echo "$b"
125918  85LATEST/install
95387   85LATEST/bin
66982   85LATEST/src
28597   85LATEST/sql
$
 

Ähnliche Themen

wer kann mir anhand eines beispiels mein problem lösen

Open-Xchange auf OpenSuse mit Commu. Installer - Compiler Fehler

C++ Klausur durchgefallen

Zurück
Oben