Terminal Befehl ähnlich TREE (DOS)

  1. IceCold

    IceCold Thread Starter

    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 ;)).
     
    IceCold, 08.08.2005
  2. autoexec.bat

    autoexec.batMacUser Mitglied

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


    ls -R


    ?
     
    autoexec.bat, 08.08.2005
  3. marc-zrh

    marc-zrhMacUser Mitglied

    Mitglied seit:
    07.08.2005
    Beiträge:
    56
    Zustimmungen:
    0
    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
     
    marc-zrh, 08.08.2005
  4. autoexec.bat

    autoexec.batMacUser Mitglied

    Mitglied seit:
    21.01.2005
    Beiträge:
    2.113
    Zustimmungen:
    20

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

    IceCold Thread Starter

    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.
     
    IceCold, 08.08.2005
  6. KoppC

    KoppCMacUser Mitglied

    Mitglied seit:
    07.01.2004
    Beiträge:
    34
    Zustimmungen:
    0
    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
     
    KoppC, 09.08.2005
  7. marc-zrh

    marc-zrhMacUser Mitglied

    Mitglied seit:
    07.08.2005
    Beiträge:
    56
    Zustimmungen:
    0
    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:

    • Dateigröße:
      715 Bytes
      Aufrufe:
      30
    marc-zrh, 09.08.2005
  8. IceCold

    IceCold Thread Starter

    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*
     
    IceCold, 09.08.2005
  9. dannycool

    dannycoolMacUser Mitglied

    Mitglied seit:
    02.02.2005
    Beiträge:
    1.489
    Zustimmungen:
    34
    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
     
    dannycool, 09.08.2005
  10. Schakal_No1

    Schakal_No1MacUser Mitglied

    Mitglied seit:
    19.05.2006
    Beiträge:
    346
    Zustimmungen:
    9
    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
     
    Schakal_No1, 19.03.2007
Die Seite wird geladen...
Ähnliche Themen - Terminal Befehl ähnlich
  1. Roland O.
    Antworten:
    20
    Aufrufe:
    2.648
    Roland O.
    24.09.2014
  2. relaht
    Antworten:
    4
    Aufrufe:
    858
  3. Kiang
    Antworten:
    5
    Aufrufe:
    2.100
    wumpscut
    23.11.2009
  4. frerin
    Antworten:
    3
    Aufrufe:
    1.090
  5. oe7
    Antworten:
    29
    Aufrufe:
    3.006