All pastes #181077 Raw Edit

Someone

public text v1 · immutable
#181077 ·published 2006-09-24 14:02 UTC
rendered paste body
#!/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