Hallo,
ich bin Neuling in der bash-Programmierung und habe folgendes Problem.
Ich möchte rekursiv die Größe von Verzeichnisssen bestimmen.
Das Kommando 'du' ist mir bekannt, aber leider nicht erlaubt
Ich hatte folgendes Skript geschrieben, wobei ich die Gesamtgröße als globale Variable exportiert habe, um den Wert zu sichern, da ich Ihn am Ende brauche, allerdings nicht weiß, wie ich den Wert retten kann.
Mir wurde klar, dass es so nicht geht, da die Variable nach dem Ablauf der subshell ihren alten Wert wiederbekommt und es mir somit nichts nützt.
Daher habe ich das Skript etwas verändert
Ich speichere mir die Gesamtgroesse in einer Variable, welche den Rückgabewert der Subshell erwartet und gebe die bisherige Gesamtgröße(puffer) mit.
Meine Fragen sind nun:
Klappt das? (bei mir kommen noch Fehler)
Wie kann ich Daten aus der Subshell zurückliefern? (mit echo auf Stdout schreiben? aber wie genau)
Kann jemand meine Lösung ergänzen/verbessern?
ich bin Neuling in der bash-Programmierung und habe folgendes Problem.
Ich möchte rekursiv die Größe von Verzeichnisssen bestimmen.
Das Kommando 'du' ist mir bekannt, aber leider nicht erlaubt

Ich hatte folgendes Skript geschrieben, wobei ich die Gesamtgröße als globale Variable exportiert habe, um den Wert zu sichern, da ich Ihn am Ende brauche, allerdings nicht weiß, wie ich den Wert retten kann.
Code:
#!/bin/bash
echo $gesamtgroesse
cd $1 #falls kein Parameter übergeben wird, so wechsle in Hauptverzeichnis
for i in `ls`
do
if [ -d $i ]
then
groesse=`ls -l $PWD | grep ^d | grep -w $i | awk '{print $5}'`
echo Verzeichnis $i : Groesse $groesse Byte
echo
puffer=$(($(($gesamtgroesse))+$(($groesse))))
export gesamtgroesse=$puffer
# es ist der vollstaendige Pfadname erforderlich
$HOME/BS_Uebungen/space $i
fi
done
Mir wurde klar, dass es so nicht geht, da die Variable nach dem Ablauf der subshell ihren alten Wert wiederbekommt und es mir somit nichts nützt.
Daher habe ich das Skript etwas verändert
Code:
#!/bin/bash
gesamtgroesse=$2
cd $1 #falls kein Parameter übergeben wird, so wechsle in Hauptverzeichnis
for i in `ls`
do
if [ -d $i ]
then
groesse=`ls -l $PWD | grep ^d | grep -w $i | awk '{print $5}'`
echo Verzeichnis $i : Groesse $groesse Byte
echo
puffer=$(($(($gesamtgroesse))+$(($groesse))))
# es ist der vollstaendige Pfadname erforderlich
gesamtgroesse=`$HOME/BS_Uebungen/space $i $puffer`
fi
done
Ich speichere mir die Gesamtgroesse in einer Variable, welche den Rückgabewert der Subshell erwartet und gebe die bisherige Gesamtgröße(puffer) mit.
Meine Fragen sind nun:
Klappt das? (bei mir kommen noch Fehler)
Wie kann ich Daten aus der Subshell zurückliefern? (mit echo auf Stdout schreiben? aber wie genau)
Kann jemand meine Lösung ergänzen/verbessern?