ContainerDriver
30-01-2004, 14:24
Hi,
ich versuche mich im Moment in Shell-Programmierung. Nun habe ich folgende Frage:
Wie kann man festellen, wann das letzte Element in einer for-Schleife erreicht ist (wenn man sich noch in der
Schleife befindet, und man nicht weiß, wie oft sie durchlaufen wird)?
Ich habe mir nämlich ein kleines Skript geschrieben, das Verzeichnisse rekursiv durchläuft. Die Ausgabe erfolgt in
Baumform, was dann so aussieht:
#..............
|-+ 'The Strokes'
| |-+ 'Is This It'
| | |-- 'The Strokes - 01.ogg'
| | |-- 'The Strokes - 02.ogg'
| | |-- 'The Strokes - 03.ogg'
| | |-- 'The Strokes - 04.ogg'
| | |-- 'Titel 05.ogg'
| | |-- 'Titel 06.ogg'
| | |-- 'Titel 07.ogg'
| | |-- 'Titel 08.ogg'
| | |-- 'Titel 09.ogg'
| | |-- 'Titel 10.ogg'
| | |-- 'Titel 11.ogg'
| |#HIER LIEGT DAS PROBLEM (die ganze 3. Spalte hoch)
|
|-+ 'the vines'
#..............
An der markierten Stelle seht ihr das Problem: Der Unterbaum ist schon zu Ende, doch das "|" wird immer noch
ausgegeben!
Hier der Code:
depth=-2
files=0
dirs=0
IFS="
"
#ifs = \n
put_out_space()
{
temp=$@
while [ $temp -gt 0 ]
do
if [ `expr $temp % 2` = 0 ]
then
echo -n "|"
else
echo -n " ";
fi
temp=`expr $temp - 1`
done
}
parse_dir()
{
items=`ls -1`
depth=`expr $depth + 2`
for DIR in $items; do
put_out_space $depth
if [ -d $DIR ]
then
echo "|-+ '$DIR'"
dirs=`expr $dirs + 1`
cd $DIR
parse_dir
put_out_space $depth
echo "|"
cd ".."
else
echo "|-- '$DIR'"
files=`expr $files + 1`
fi
done
depth=`expr $depth - 2`
}
cd "/home/florian/music"
parse_dir
echo "$files Files, $dirs Directories"
Wäre schön wenn ihr mir helfen könntet!
MfG
Florian
ich versuche mich im Moment in Shell-Programmierung. Nun habe ich folgende Frage:
Wie kann man festellen, wann das letzte Element in einer for-Schleife erreicht ist (wenn man sich noch in der
Schleife befindet, und man nicht weiß, wie oft sie durchlaufen wird)?
Ich habe mir nämlich ein kleines Skript geschrieben, das Verzeichnisse rekursiv durchläuft. Die Ausgabe erfolgt in
Baumform, was dann so aussieht:
#..............
|-+ 'The Strokes'
| |-+ 'Is This It'
| | |-- 'The Strokes - 01.ogg'
| | |-- 'The Strokes - 02.ogg'
| | |-- 'The Strokes - 03.ogg'
| | |-- 'The Strokes - 04.ogg'
| | |-- 'Titel 05.ogg'
| | |-- 'Titel 06.ogg'
| | |-- 'Titel 07.ogg'
| | |-- 'Titel 08.ogg'
| | |-- 'Titel 09.ogg'
| | |-- 'Titel 10.ogg'
| | |-- 'Titel 11.ogg'
| |#HIER LIEGT DAS PROBLEM (die ganze 3. Spalte hoch)
|
|-+ 'the vines'
#..............
An der markierten Stelle seht ihr das Problem: Der Unterbaum ist schon zu Ende, doch das "|" wird immer noch
ausgegeben!
Hier der Code:
depth=-2
files=0
dirs=0
IFS="
"
#ifs = \n
put_out_space()
{
temp=$@
while [ $temp -gt 0 ]
do
if [ `expr $temp % 2` = 0 ]
then
echo -n "|"
else
echo -n " ";
fi
temp=`expr $temp - 1`
done
}
parse_dir()
{
items=`ls -1`
depth=`expr $depth + 2`
for DIR in $items; do
put_out_space $depth
if [ -d $DIR ]
then
echo "|-+ '$DIR'"
dirs=`expr $dirs + 1`
cd $DIR
parse_dir
put_out_space $depth
echo "|"
cd ".."
else
echo "|-- '$DIR'"
files=`expr $files + 1`
fi
done
depth=`expr $depth - 2`
}
cd "/home/florian/music"
parse_dir
echo "$files Files, $dirs Directories"
Wäre schön wenn ihr mir helfen könntet!
MfG
Florian