seth: (ms) tree for linux

gudn tach!

kurz:
1. wie fuehrt man in einem linux-cli automatisch so viele pipes hintereinander aus wie die hoechste unterverzeichnistiefe gross ist?
2. tree in windows ist X in linux. was ist X?

lang:

in microsoft-betriebssystemen gibt es ja den tollen tree-befehl, der einem ein verzeichnis samt unterverzeichnissen "grafisch aufbereitet" auspuckt.
beispielhafte ausgabe:

tree /a
C:.
+---autom4te.cache
+---conf
|   ---patterns
+---docs
+---m4
+---scripts
---src
    +---modules
    +---parsetpl
    +---perl
    |   ---Plugins
    |       ---Management
    ---swig
        +---CForum-Clientlib
        +---CForum-Configparser
        +---CForum-Template
        ---CForum-Validator

gibt es mit linux-board-mitteln (mir egal, wem sich bei diesem begriff die zehennaegel aufrollen) die moeglichkeit eine aehnliche ausgabe zu erhalten?

mein bisheriger ansatz sieht folgendermassen aus:

mit find kann man sich zumindest schon mal alle verzeichnisse samt unterverzeichnissen anzeigen lassen:
$ find . -type d
.
./autom4te.cache
./conf
./conf/patterns
./docs
./m4
./scripts
./src
./src/modules
./src/parsetpl
./src/perl
./src/perl/Plugins
./src/perl/Plugins/Management
./src/swig
./src/swig/CForum-Clientlib
./src/swig/CForum-Configparser
./src/swig/CForum-Template
./src/swig/CForum-Validator

mit sed koennte man diese ausgabe nun noch formatieren. ich bin allerdings nicht so der sed-held, bisher habe ich nur sowas erreicht:

$ find . -type d | sed "s~./[^/]*/~    ~"
.
./autom4te.cache
./conf
    patterns
./docs
./m4
./scripts
./src
    modules
    parsetpl
    perl
    perl/Plugins
    perl/Plugins/Management
    swig
    swig/CForum-Clientlib
    swig/CForum-Configparser
    swig/CForum-Template
    swig/CForum-Validator

und mit einem schritt mehr:

$ find . -type d | sed "s~./[^/]*/~    ~" | sed "s~\  [^ ][^/]*/~      ~"
.
./autom4te.cache
./conf
    patterns
./docs
./m4
./scripts
./src
    modules
    parsetpl
    perl
        Plugins
        Plugins/Management
    swig
        CForum-Clientlib
        CForum-Configparser
        CForum-Template
        CForum-Validator

sieht ja schon fast gut aus. aaaber an "Plugins/Management" wird deutlich, dass ich fuer jedes weitere verschachtelte unterverzeichnis ein mal mehr
| sed "s~\  [^ ][^/]*/~      ~"
anhaengen muesste, was es mir wiederum unmoeglich erscheinen laesst, einen alias tree anzulegen.

klaro, ich koennte mir einfach ein perl-script schreiben, das das gewuenschte tut. aber ich frage lieber erstmal, ob es da nicht einfachere moeglichkeiten gibt.

prost
seth

  1. Hallo seth,

    1. tree in windows ist X in linux. was ist X?

    Hilft Dir tree?
    siehe auch http://www.computerhope.com/unix/tree.htm, gefunden über
    http://jmatrix.net/dao/case/case.jsp?case=7F000001-1EC49DB-FE085CFCED-9.

    Freundliche Grüße

    Vinzenz

    1. gudn tach!

      1. tree in windows ist X in linux. was ist X?

      Hilft Dir tree?
      siehe auch http://www.computerhope.com/unix/tree.htm

      hmm, das sieht gut aus.
      aaaber es will sich bei mir nicht kompilieren lassen...

      $ make
      gcc -O2 -Wall -fomit-frame-pointer -DLINUX_BIGFILE   -c -o tree.o tree.c
      tree.c:192: error: conflicting types for '__mb_cur_max'
      /usr/include/stdlib.h:57: error: previous declaration of '__mb_cur_max' was here
      tree.c:192: error: conflicting types for '__mb_cur_max'
      /usr/include/stdlib.h:57: error: previous declaration of '__mb_cur_max' was here
      tree.c: In function main': tree.c:198: error: storage size of 'st' isn't known tree.c:463: warning: implicit declaration of function lstat64'
      tree.c:198: warning: unused variable st' tree.c: In function listdir':
      tree.c:572: error: storage size of 'sb' isn't known
      tree.c:584: warning: implicit declaration of function stat64' tree.c:609: warning: long int format, different type arg (arg 3) tree.c:572: warning: unused variable sb'
      tree.c: In function read\_dir': tree.c:777: error: storage size of 'lst' isn't known tree.c:777: error: storage size of 'st' isn't known tree.c:777: warning: unused variable lst'
      tree.c:777: warning: unused variable `st'
      make: *** [tree.o] Error 1

      werde ich gesteinigt, wenn ich sage, dass ich es gerade unter cygwin versuche zu kompilieren?

      gefunden über http://jmatrix.net/dao/case/case.jsp?case=7F000001-1EC49DB-FE085CFCED-9.

      und wie bist du _darauf_ gekommen? da steht ja auch "The tree command for linux is very useful, but tree is difficult to find because google searching comes up with numerous hits about the linux file system tree, etc."
      das problem hatte ich zunaechst auch. auf die idee nach '"tree command" linux' zu suchen, bin ich erst jetzt gekommen. tss.

      hmm, mal schauen, ob ich anhand der gcc-meldungen via google irgendwas herausfinden kann...

      prost
      seth

      1. Hallo seth.

        werde ich gesteinigt, wenn ich sage, dass ich es gerade unter cygwin versuche zu kompilieren?

        Sehr wahrscheinlich, ja.
        Warum willst du die Software unter einem System kompilieren, unter dem sie niemals laufen wird?

        (Bei mir sah die Installation übrigens gewohnt einfach aus: „agi¹ tree“, fertig.)

        Einen schönen Dienstag noch.

        Gruß, Ashura

        --
        ¹ agi: „alias agi='apt-get install'“
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]
        1. gudn tach!

          werde ich gesteinigt, wenn ich sage, dass ich es gerade unter cygwin versuche zu kompilieren?

          Sehr wahrscheinlich, ja.

          oh.

          Warum willst du die Software unter einem System kompilieren, unter dem sie niemals laufen wird?

          nun ja,
          1. ich wollte nicht extra dafuer neu booten, zumal ich eh eine loesung wollte, die moeglichst ueberall funzt und
          2. ich dachte mir, dass der unterschied bei sowas simplem wie tree nicht sonderlich gross waere... hmpf... war er ja auch nicht:

          $ diff -r tree-1.5.0 tree-1.5.0-cygwin/
          Only in tree-1.5.0-cygwin/: CYGWIN-PATCH
          diff -r tree-1.5.0/Makefile tree-1.5.0-cygwin/Makefile
          11c11
          < CFLAGS=-O2 -Wall -fomit-frame-pointer -DLINUX_BIGFILE
          ---

          CFLAGS=-O2 -Wall -fomit-frame-pointer

          34c34
          < prefix = /usr/local
          ---

          prefix = /usr

          diff -r tree-1.5.0/tree.c tree-1.5.0-cygwin/tree.c
          191a192

          #ifndef __CYGWIN__

          192a194

          #endif

          609c611
          <     if (inodeflag) sprintf(path," %7ld",(*dir)->inode);
          ---

          if (inodeflag) sprintf(path," %7ld",(long int)(*dir)->inode);

          prost
          seth

      2. Hallo,

        aaaber es will sich bei mir nicht kompilieren lassen...

        http://lassauge.free.fr/cygwin/release/tree/
        Solltest Du keine inoffiziellen Pakete wollen, kannst Du ja nachfragen, wie er es compiliert hat.

        Die upstream Seite zu tree steht bei Debian uebrigens im changelog.

        Gruss
        Thomas

        1. gudn tach!

          http://lassauge.free.fr/cygwin/release/tree/
          Solltest Du keine inoffiziellen Pakete wollen, kannst Du ja nachfragen, wie er es compiliert hat.

          oh, wie schoen.
          source ist ja auch dabei und liess sich problemlos compilieren, womit sich auch ein nachfragen eruebrigt. :-)

          proderat
          seth

      3. hmm, das sieht gut aus.
        aaaber es will sich bei mir nicht kompilieren lassen...

        Nimm doch eine 'Script-Lösung'.
        Hier, wie dein eigener Ansatz, nur fertig ;-):
        http://www.boku.ac.at/unixeinf/shell.html#Heading31
        http://www.centerkey.com/tree/
        ftp://ftp.armory.com/pub/scripts/vtree
        http://www.tldp.org/LDP/abs/html/contributed-scripts.html#TREE

        Vielleicht hilft dir einer der Links

        Gruss
        Jonas

        1. gudn tach!

          Nimm doch eine 'Script-Lösung'.
          Hier, wie dein eigener Ansatz, nur fertig ;-):
          http://www.boku.ac.at/unixeinf/shell.html#Heading31
          http://www.centerkey.com/tree/
          ftp://ftp.armory.com/pub/scripts/vtree
          http://www.tldp.org/LDP/abs/html/contributed-scripts.html#TREE

          ahhh, wie geil.
          wie hast du danach gesucht?

          prost
          seth

          1. ahhh, wie geil.
            wie hast du danach gesucht?

            Ähöm, mit google... ;-)

            Na im Ernst, wenn ich mich recht erinnere waren meine Suchbegriffe 'tree unix script'... Hatte auch schon den einen oder anderen Link in den Bookmarks...

            Gruss
            Jonas

            1. gudn tach!

              wie hast du danach gesucht?

              [...] wenn ich mich recht erinnere waren meine Suchbegriffe 'tree unix script'...

              hmm, ok, da hab ich mich einfach doof angestellt.
              (und zwar gleich doppelt, weil ich faelschlicherweise dachte, dass sed nicht den g-modifier kennt.)

              prost
              seth

      4. Hallo seth,

        gefunden über http://jmatrix.net/dao/case/case.jsp?case=7F000001-1EC49DB-FE085CFCED-9.
        und wie bist du _darauf_ gekommen?

        ganz einfach mit den Suchbegriffen 'tree command linux'.

        Freundliche Grüße

        Vinzenz