Programm zur Semigrafischen Darstellung der Directory-Baumstruktur

M

m_f_5

Guten Tag =)

Ich such seit Tagen für die folgende Aufgaben, die wir an der FH lösen sollen eine Lösung. Da keiner meiner Komilitonen eine Ahnung hat bzw kein wirkliches Wissen über Unix/Shell besitzt um diese Aufgabe zulösen frage ich(wir) euch nach Ansätzen um diese Aufgabe zulösen. Viel lieber wär mir(uns) eine komplett Lösung(die nicht zu 100% richtig sein muss).

Huh

Hier die Aufgabe:

Es soll ein Shell-Programm entwickelt werden, das beim Aufruf die Baumstruktur des angegebenen Directories ausgibt. (ähnlich, wie das DOS-Kommando "tree")

Name des Programms: baum

Aufruf: baum [pfad]
a) ohne Parameter:
Ausgangspunkt ist das aktuelle Directory
b) mit Parameter "pfad":
Ausgangspunkt ist das durch "pfad" definierte Directory

Beispiel:
$baum $HOME
/home/unix1010 (* Ausgangs-Directory *)
|--team1 (* Ebene 1 *)
| |-- spezi (* Ebene 2 *)
| |-- java
| | |--lbis (* Ebene 3 *)
| | |--exe
| |--cpp
| |--c_prog
| | |--lbis
| | |--exe
| | | |-old (* Ebene 4 *)
|--team2
| |
usw.

Hinweise
- Die Aufgabe kann z.B. durch rekursiven Aufruf eines Unterprogramms oder durch Anwendung des Kommandos ls -R gelöst werden.
- Mit Hilfen des Kommandos cut können einzelne Teile aus einer Zeile entnommen werden.
- Die in dem Beispiel enthaltenen Kommantare (*...*) werden nicht ausgegeben.

Zudem dürfen wir nur Unix-Standardbefehle benutzen und auch keine eigenen in C programmieren. Die Programme find und set dürfen wir auch nicht benutzen. Eingabefehler sollen auch noch so wiet wie möglich abgefangen werden =P

Wir würden uns über jede Hilfe freuen. :)
 
Vielleicht hiflt euch dies:

Code:
#!/bin/bash
# tree.sh

#  Written by Rick Boivie. Used with permission.
#  This is a revised and simplified version of a script
#  by Jordi Sanfeliu (and patched by Ian Kjos).
#  This script replaces the earlier version used in
#  previous releases of the Advanced Bash Scripting 
# Guide.

# ==> Comments added by the author of this document.


search () {
for dir in `echo *`
#  ==> `echo *` lists all the files in current working directory,
#+ ==> without line breaks.
#  ==> Similar effect to for dir in *
#  ==> but "dir in `echo *`" will not handle filenames with blanks.
do
  if [ -d "$dir" ] ; then # ==> If it is a directory (-d)...
  zz=0                    # ==> Temp variable, keeping track of directory level.
  while [ $zz != $1 ]     # Keep track of inner nested loop.
    do
      echo -n "| "        # ==> Display vertical connector symbol,
                          # ==> with 2 spaces & no line feed in order to indent.
      zz=`expr $zz + 1`   # ==> Increment zz.
    done

    if [ -L "$dir" ] ; then # ==> If directory is a symbolic link...
      echo "+---$dir" `ls -l $dir | sed 's/^.*'$dir' //'`
      # ==> Display horiz. connector and list directory name, but...
      # ==> delete date/time part of long listing.
    else
      echo "+---$dir"       # ==> Display horizontal connector symbol...
      # ==> and print directory name.
      numdirs=`expr $numdirs + 1` # ==> Increment directory count.
      if cd "$dir" ; then # ==> If can move to subdirectory...
        search `expr $1 + 1` # with recursion ;-)
        # ==> Function calls itself.
        cd ..
      fi
    fi
  fi
done
}

if [ $# != 0 ] ; then
  cd $1 # move to indicated directory.
  #else # stay in current directory
fi

echo "Initial directory = `pwd`"
numdirs=0

search 0
echo "Total directories = $numdirs"

exit 0
 

Ähnliche Themen

Programm zur Semigrafischen Darstellung der Directory-Baumstruktur

Segmentation Fault bei strcat?

CGI laesst sich nicht ausfuehren

Zurück
Oben