#!/bin/sh
## Hier kommt die Funktion usage(). Funktionen müssen VOR dem Hauptcode stehen.
# Bash will nur wissen was es eben gibt. Code wird hier noch keiner ausgeführt!
usage() {
# Bitte erst main code lesen! (siehe unten)
echo "$0 [-d] [-r \"reg.ausdr\"] [directory]" >&2
echo " -d nur Verzeichnisse auflisten" >&2
echo " -r nur Verzeichnisse und Dateien, die durch reg. Ausdruck abgedeckt sind" >&2
}
## Hier kommt die Funktion baum(). Funktionen müssen VOR dem Hauptcode stehen.
# Bash will nur wissen was es eben gibt. Code wird hier noch keiner ausgeführt!
baum() # baum - fuer die graphische Baum-Ausgabe verantwortlich
{
# Bitte erst main code lesen! (siehe unten)
if [ ! -x "$1" ] ; then
echo -e "-x\c ";
exit;
fi
cd $1
# Setzen der Positionsparameter mit allen Namen des Directories;
set -f
set "" `ls -a 2>/dev/null` || { echo -e "-r\c "; exit; }
shift
if [ $# -eq 2 ]; then echo -e "-\c "; fi ; args="$*"; argus=""
if [ -n "$OPTION" ] # Abarbeiten der angegebenen Optionen
then
case $OPTION in
*d*) for i in $args
do
[ -d "$i" ] && argus="$argus $i"
done
args="$argus"
argus="";;
esac
case $OPTION in
*r*) for i in $args
do
if [ -d "$i" ] || case $i in
$ra) :;;
*) false;;
esac
then
argus="$argus $i"
fi
done
args="$argus"
argus="";;
esac
fi
if [ -n "$args" ] # Setzen der Positionsparameter mit den verbliebenen Dateien
then
set "" `ls -adF $args 2>/dev/null`
else
set ""
fi
shift # Um ersten leeren Positionsparameter zu beseitigen
while [ -n "$2" ] # Ausgabe des graphischen Baumteils
do
if [ "$1" != "./" -a "$1" != "../" ]
then
echo "\n${striche}|----$1\c "
if [ -d "$1" ]; then (striche="${striche}| "; baum $1 ); fi
fi
shift
done
if [ -n "$1" -a "$1" != "./" -a "$1" != "../" ]
then
if [ -d "$1" ]
then
echo -e "\n${striche}\`----$1\c "
striche="${striche} "; baum $1
else
echo -e "\n${striche}\`----$1\n${striche}\c "
fi
fi
}
## MAIN CODE START
trap 'echo; exit' 0 1 2 3 15 # Trap wir ausgeführt wenn das Script ein signal 0,1,2,3 oder 15 erhält.
## Hier die Auflistung:
#trap -l
# 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
# 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
# 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
#13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
#17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
#21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
#25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
#29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
#35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
#39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
##43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
#47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
#51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
#55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
#59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
#63) SIGRTMAX-1 64) SIGRTMAX
while getopts dr: opt # Abarbeiten der angegebenen Optionen
do
case $opt in ## hier werden die argumente wie z.b. -d und -r abgearbeitet bzw gefiltert.
d) OPTION="${OPTION}d";; # $OPTION enthält hier z.b. "d"
r) OPTION="${OPTION}r";ra="$OPTARG";; # sollte die -r Option angegeben sein, wird der Suchausdruck mit an $ra rangehängt
\?) usage; exit 1;;
esac
## Beispiel 1:
#Aufruf: ./tree2.sh -r file
#Inhalt der variable
#$OPTION ist dann "r"
#Inhalt von $ra ist dann "file"
## Beispiel 1:
#Aufruf: ./tree2.sh -d
#Inhalt der variable
#$OPTION ist dann "d"
#Inhalt von $ra ist dann "NULL" bzw nix, leer, nada
echo $OPTION $ra
exit
done
shift `expr $OPTIND - 1`
dir=${1:-`pwd`} # Bestimmen der Wurzel des auszugebenden Baums
if [ ! -d "$dir" ] ; then echo "$0: $dir ist kein Directory" >&2 ; exit 1 ; fi
echo -e "$dir\c "
baum $dir
## MAIN CODE END