Terminal Befehl ähnlich TREE (DOS)

Dieses Thema im Forum "Mac OS X - Unix & Terminal" wurde erstellt von IceCold, 08.08.2005.

  1. IceCold

    IceCold Thread Starter Gast

    Hallo,
    ich möchte gerne eine strukturierte Verzeichnisstruktur eines Ordners auf meiner externen Festplatte erstellen.
    Dabei sollte das oberste Verzeichnis (Ebene 1) am Anfang dargestellt werden, darunter dann das 1. Unterverzeichnis (Ebene 2), darunter dann direkt alle Dateien (Ebene 3), die sich darin befinden. Erst unterhalb der Dateien soll dann das 2. Unterverzeichnis (Ebene 2) angezeigt werden.
    Unter Windows funktioniert das prima mit dem Tree Befehl.
    Bei Mac OS X kenn ich allerdings nur den Befehl "ls", und da werden zuerst alle Unterverzeichnisse (Ebene 2) aufgelistet, und erst darunter dann die Inhalte der einzelnen Unterverzeichnisse.

    Ich hoffe mal, ich konnte mich verständlich ausdrücken.
    Das ganze soll dann per >file.txt in eine Datein geschrieben werden (die Ergänzung ist zum Glück identisch mit Windows ;)).
     
  2. autoexec.bat

    autoexec.bat MacUser Mitglied

    Beiträge:
    2.130
    Zustimmungen:
    20
    MacUser seit:
    21.01.2005
    So richtig hab ich jetzt zwar nicht verstanden was der Tree Befehl macht, aber meinst du vielleicht


    ls -R


    ?
     
  3. marc-zrh

    marc-zrh MacUser Mitglied

    Beiträge:
    56
    Zustimmungen:
    0
    MacUser seit:
    07.08.2005
    Du meinst wohl 'lstree', hier ein Beispiel:

    root@bernina$ lstree /usr | more

    usr/
    |----X11R6/
    | |----bin/
    | | |----X@
    | | |----XFree86*
    | | |----Xmark*
    usw...

    http://www.sun.com/bigadmin/scripts/submittedScripts/lstree.sh.txt

    Gruss
    Marc
     
  4. autoexec.bat

    autoexec.bat MacUser Mitglied

    Beiträge:
    2.130
    Zustimmungen:
    20
    MacUser seit:
    21.01.2005

    Öhm... täusch ich mich, oder funktioniert das Skript überhaupt nicht? :(
     
  5. IceCold

    IceCold Thread Starter Gast

    Also das mit dem lstree schaut schon mal gut aus.
    Leider hab ich (noch) überhaupt keine Ahnung, was ich mit so einem Skript anstellen muss, bzw wie man das installiert oder was auch immer. Bin eben noch ein Newbie.
     
  6. KoppC

    KoppC MacUser Mitglied

    Beiträge:
    34
    Zustimmungen:
    0
    MacUser seit:
    07.01.2004
    erzeuge einfach eine ausführbare datei und lege diese dann in /usr/bin ab. jetzt kannst du lsthree als befehl benutzen

    ist dies bei euch auch so es ist egal was man für einen pfad angibt die ausgabe bekommt man immer vom aktuellen verzeichniss

    KoppC@remoteadmin:/Volumes/Daten$lsthree /Users/KoppC/Downloads/
    /Users/KoppC/Downloads/ (ist nur der pfad)
    |..Bestellschein (die ausgabe ist von meiner Datenplatte)
    |----Bilder
    |----Schriften
     
    Zuletzt bearbeitet: 09.08.2005
  7. marc-zrh

    marc-zrh MacUser Mitglied

    Beiträge:
    56
    Zustimmungen:
    0
    MacUser seit:
    07.08.2005
    Genau, den lstree.txt script (z.bsp. im attachement des postings) downloaden
    -mv lstree.txt lstree.sh
    -chmod +x lstree.sh oder chmod 755 lstree.sh
    -ausführen mit ./lstree /usr oder ./lstree /home oder eben den script in einem bin-directory platzieren.
    -ich habe bei mir noch ein symlink gemacht, sodass ich lstree.sh durch lstree aufrufen kann: ln -s /bin/lstree.sh /bin/lstree

    Gruss
    Marc
     

    Anhänge:

    Zuletzt bearbeitet: 09.08.2005
  8. IceCold

    IceCold Thread Starter Gast

    Vielen Dank für die Hilfe,
    mit sudo hats dann endlich geklappt, vorher erhielt ich immer Permission denied.

    Das Skript ist zwar nicht ganz so schön wie der Tree Befehl, aber es erfüllt seinen Zweck.


    Beispiel einer Tree Ausgabe:
    Code:
    D:.
    |   AUTHORS.txt
    |   vlc.exe
    |   
    +---http
    |   |   index.html
    |   |   
    |   +---admin
    |   |       browse.html
    |   |       
    |   \---vlm
    |           edit.html
    |           
    +---locale
    |   +---da
    |   |   \---LC_MESSAGES
    |   |           vlc.mo
    |   |           
    |   +---de
    |   |   \---LC_MESSAGES
    |   |           vlc.mo
    


    EDIT:
    Wollte den Befehl gerade über Netzwerk anwenden (über eine Samba Freigabe eines Win XP Rechners).
    Da erstellt er mir immer wieder eine neue Zeile, sobald eine Leerzeichen im Dateinamen vorkommt.
    "Dies ist der Dateiname.txt" schaut dann so aus:
    ---Dies
    ---ist
    ---der
    ---Dateiname.txt*
     
    Zuletzt von einem Moderator bearbeitet: 09.08.2005
  9. dannycool

    dannycool MacUser Mitglied

    Beiträge:
    1.485
    Zustimmungen:
    34
    MacUser seit:
    02.02.2005
    For .. in `ls` ruft ls auf und geht alle Elemente der Liste die ls ausgibt durch. Liste? Das gibt doch Text aus? Genau, und wenn man den als Liste behandelt sagt die Shell, die einzelnen Elemente sind durch Whitespace getrennt. Deshalb funktionieren fast alle dieser Scripte damit nicht. (Es gibt natürlich Alternativen zu `ls`, aber irgendwie denkt da keiner dran.)

    Hier ist zur Abwechslung mal etwas Spaghetti-C:

    Code:
    #include <stdio.h>
    #include <sys/types.h>
    #include <fts.h>
    
    int main(int argc, char **argv) {
            FTS *fts;
            FTSENT *e;
            int i;
    
            if(argc < 2) return 0;
            fts = fts_open(argv+1, FTS_COMFOLLOW|FTS_NOSTAT|FTS_PHYSICAL, NULL);
            while((e = fts_read(fts))) {
                    if(e->fts_number) continue;
                    if(e->fts_info == FTS_D && e->fts_level > 0) for(i=e->fts_level; i>0; --i) printf(i>1?"|   ":"|   \n");
                    for(i=e->fts_level - (e->fts_info == FTS_D); i>0; --i) printf("|   ");
                    if(e->fts_info == FTS_D && e->fts_level > 0) printf("+---");
                    puts(e->fts_name);
                    e->fts_number = 1;
            }
            fts_close(fts);
            return 0;
    }
    Das selbe in compiliert. (Rechte setzen nicht vergessen.)

    Aufruf:

    Code:
    $ ./fstree /tmp
    tmp
    |  
    +---.KerberosLogin-501-5879536 (inited,gui,tty,local)
    |   |   KLLCCache.lock
    |  
    +---501
    |   cs_cache_lock_92
    |  
    +---uscreens
    |   |  
    |   +---S-df
    |   |   |   249.ttyp1.dhcp202
     
  10. Schakal_No1

    Schakal_No1 MacUser Mitglied

    Beiträge:
    346
    Zustimmungen:
    9
    MacUser seit:
    19.05.2006
    ich hab versucht, die Skripte zu installieren, hab es jedoch bei keinem geschafft. Gibt es nicht den ganz einfachen und essentiellen Unix-Befehl "tree" bzw kann man den nachträglich irgendwie installieren? ich hab gelesen, dass der nicht immer bei allen Linux Distributionen dabei ist und man den daher manchmal nachinstallieren muss, jedoch hab ich nicht herausbekommen können, wo.

    EDIT: hab es jetzt doch geschafft, das c-skript zu installieren, war noch nicht universal. Aber ich bleibe dabei, dass ich lieber den Unix-Befehl tree hätte, der ist ein bisschen angenehmer
     
    Zuletzt bearbeitet: 19.03.2007
Die Seite wird geladen...

Diese Seite empfehlen