Programm zur Semigrafischen Darstellung der Directory-Baumstruktur

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Faceried, 06.01.2009.

  1. #1 Faceried, 06.01.2009
    Faceried

    Faceried Grünschnabel

    Dabei seit:
    15.12.2008
    Beiträge:
    1
    Zustimmungen:
    0
    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 nicjht zu 100% richtig sein muss).

    :hilfe2:

    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. :))
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. foexle

    foexle Kaiser

    Dabei seit:
    02.05.2007
    Beiträge:
    1.104
    Zustimmungen:
    0
    Ort:
    Saarbrücken
    du hast die lösung doch schon in der aufgabenstellung stehen.
    ls -R als rekursion und baust das teil einfach auf ... danach kommt immer eine abfrage ob es sich um eine Dir oder was anderes handelt.
    Bei einer Dir gehste in die nächste ebene bei etwas anderem (link, file) hängste ein blatt an

    wie das programmiertechnisch geht, kannst du sehr schnell erlernen. Ich denke nicht das hier jmd dir eine komplettlösung vorsetzt.

    greetz
     
  4. #3 flugopa, 06.01.2009
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München
    > ... Aufgaben ... FH
    Frage mal höflich die Linuxadmins in der FH, die kennen nämlich das Prog. tree auch unter Linux

    Code:
    # man tree
    NAME
           tree - list contents of directories in a tree-like format.
    
    SYNOPSIS
           tree  [-adfgilnopqrstuxACDFNS]  [-L  level  [-R]]  [-H  baseHREF]  [-T  title]  [-o filename] [--nolinks] [-P pattern] [-I pattern] [--inodes]
           [--device] [--noreport] [--dirsfirst] [--version] [--help] [directory ...]
    
    
     
  5. #4 Gott_in_schwarz, 06.01.2009
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Ja aber es soll ja selber programmiert werden. Und außerdem c verboten. (Ich schätze mal einfach, dass tree ein c-Programm ist.)

    Hier ein paar Hints für die Aufgabe:
    Code:
    ls -1d */
    Gibt die Verzeichnisse im aktuellen Verzeichnis aus. (*/ ist ein glob auf Verzeichnisse und -d sagt ls "nur Verzeichnisnamen, nicht den Inhalt ausgeben". Die "-1" Option sorgt dafür, dass pro Zeile nur ein Verzeichnis angezeigt wird.)

    Mit einer while-read Kombination kann man dann schon über die Verzeichnisse iterieren:
    Code:
    ls -d1 */ | while read dir; do echo "current dir: $dir"; done
    Der Skriptname ist in der Variablen "$0" enthalten, die Parameter zum Skript in den Variablen $1, $2, ... $n. Damit kann man das Programm rekursiv machen. (Vielleicht ein kleines Wrapper-Skript um das dann *rein* rekursive Skript? kA, eure Entscheidung.)
    Code:
    #!/bin/sh
    
    if [ x"$1" = x"ENOUGH" ]; then
        echo "ok then"
        exit
    else
        echo not enough, hm?
        echo parameters were: "$@"
    fi
    
    $0 ENOUGH
    Um zu testen ob ein Verzeichnis ein Link ist, benutze man die "-L" Option von test. Lektüre:
    Code:
    man test
    Und ja, auf Links sollte man testen. Schließlich können diese auf höherliegende Verzeichnisse verweisen und dadurch Endlosschleifen produzieren. (Wenn du nicht grade jede bereits besuchte Position explizit speicherst; wäre mir aber viel zu viel Arbeit.)
    Btw, "man test" hilft der auch bei "Eingabefehler sollten abgefängen werden", nur so als Hinweis.

    Oh, und falls es noch nicht bekannt ist: mit "cd" wechselt man das Verzeichnis.

    So, sollten imho genug Hilfen sein.
     
  6. Tblue

    Tblue Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Ich habe die Aufgabe ohne ls -R gelöst. ;)
    Wenn ihr also eure Lösung *vergleichen* wollt, schaut euch meine an.
    Bitte kopiert nicht einfach, ihr sollt ja auch etwas lernen. :)

    MfG,

    Tblue
     
  7. #6 Gott_in_schwarz, 06.01.2009
    Zuletzt bearbeitet: 06.01.2009
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Tblue: Deine for-Schleife funktioniert nicht bei Datei-/Verzeichnisnamen mit Leerzeichen.
    Code:
    IFS=$'\n'
    Würde helfen (ist allerdings n bash feature, der interpolated string, bei sh müsstest du dann "explizit" sein), aber da ist ne while-read Kombi imho "sauberer".
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Programm zur Semigrafischen Darstellung der Directory-Baumstruktur

Die Seite wird geladen...

Programm zur Semigrafischen Darstellung der Directory-Baumstruktur - Ähnliche Themen

  1. Programm zur Semigrafischen Darstellung der Directory-Baumstruktur

    Programm zur Semigrafischen Darstellung der Directory-Baumstruktur: 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...
  2. Welche Distri für Programming from the Ground Up

    Welche Distri für Programming from the Ground Up: Hallo! Ich möchter gerne das Buch Programming from the Ground Up durcharbeiten. savannah_nongnu_org/projects/pgubook/ Da geht es um Programmieren...
  3. Externes Programm mit Script ausführen?

    Externes Programm mit Script ausführen?: Hallo, ich würde gern ein Script zum klonen von festplatten schreiben z.B. mit dem Programm Mondo Rescue. Ist es möglich externen Programmen...
  4. Jetbrains gibt JVM-Programmiersprache Kotlin 1.0 frei

    Jetbrains gibt JVM-Programmiersprache Kotlin 1.0 frei: Jetbrains, Entwickler der freien Entwicklungsumgebung für Java, Grails und einige andere Programmiersprachen IntelliJ IDEA, hat die selbst...
  5. Programm der Chemnitzer Linux-Tage 2016 steht

    Programm der Chemnitzer Linux-Tage 2016 steht: Am Wochenende des 19. und 20. März steht Chemnitz, oder genauer gesagt die TU Chemnitz, wieder ganz im Zeichen des Tux. Nun haben die...