ASCII-Bibliothek zum Erstellen von "hübschen" Verzeichnisbäumen?


73

Gibt es ein * nix-Tool oder eine Perl / PHP-Bibliothek, mit der Sie auf einfache Weise Verzeichnisbaumvisualisierungen erstellen können, die wie folgt aussehen?

www
|-- private
|    |-- app 
|    |    |-- php
|    |    |    |-- classes
|    |    |    +-- scripts
|    |    |-- settings
|    |    +-- sql
|    +-- lib
|         +-- ZendFramework-HEAD
+-- public
    |-- css
    |-- images
    +-- scripts

4
Wenn jemand unter Windows nach dieser Lösung sucht (ich war es!), Können Sie einfach treeüber die Befehlszeile eingeben.
Dan Atkinson

Antworten:


109

Wie wäre es mit diesem Beispiel aus Unix Tree / Linux Tree :

ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'  

14
Du musst einen
Einzeiler

2
Das ist ekelhaft großartig, aber ein Teil von dem, was ich an der obigen Ausgabe mag, ist, dass nicht alle Striche in die Dateien fließen, sondern dass diese Pipes die Unterverzeichnisse vertikal verbinden
Alan Storm,

1
Sie können die Lösung dieser Person dann überprüfen: sandeep-vaniya.blogspot.com/2008/04/…
bobbymcr

1
groß! obwohl nicht ganz die richtige Ausgabe (ich kritisiere nicht so sehr, als dass ich konstruktive Kritik hinzufüge) - werden die Dateien in Unterverzeichnissen alle gruppiert, als ich es versuchte?
Monojohnny

3
Weiß jemand, wie Sie diesem Skript hinzufügen würden, damit es auch Dateien im Verzeichnis anzeigt?
Raigex

79

Dieser Oneliner ist ziemlich cool, ich würde empfehlen, den Baum util zu verwenden.

bash-3.2$ mkdir -p this/is/some/nested/example
bash-3.2$ mkdir -p this/is/another/super/nested/example
bash-3.2$ mkdir -p this/is/yet/another/example
bash-3.2$ mkdir -p this/is/some/nested/other/example
bash-3.2$ tree this
this
`-- is
    |-- another
    |   `-- super
    |       `-- nested
    |           `-- example
    |-- some
    |   `-- nested
    |       |-- example
    |       `-- other
    |           `-- example
    `-- yet
        `-- another
            `-- example

13 directories, 0 files

3
Baum ist einfach super!
Cyril N.

20
Für diejenigen auf einem Mac,brew install tree
Briangonzalez

8
Ich kämpfte mit Baum mit Sonderzeichen als Standard, aber Vorschlag von codealpha.net/696/... zu bedienen tree --charset=ASCII, so dass Baum oben Zeichen wie in user1116793 Vorbild produziert.
Brady Trainor

Es hat auch einige kreative Verwendungszwecke. Ich verwende es, um meine Besorgungen zu visualisieren (die meisten Tools verfügen nicht über echte hierarchische Fähigkeiten - nicht einmal Jira).
Sridhar Sarnobat

18

Mir ist klar, dass diese Frage vor langer Zeit beantwortet wurde, aber ich habe gerade dieses Programm namens tree gefunden, das auch ziemlich cool ist.


1
Dies sollte als die richtige Antwort markiert werden. Es unterstützt Dircolors und die Ausgabe ist übersichtlicher. Es ist sogar ein Macport für Mac OS X-Benutzer.
Sridhar Sarnobat

3
treekann auch mit Homebrew installiert werden, für diejenigen, die von Macports weitergezogen sind.
Jeffbyrnes

Es ist zu beachten, dass Sie unter Windows einfach treeüber die Befehlszeile eingeben können. Sie müssen nichts installieren.
Dan Atkinson

16

Siehe die RecursiveTreeIteratorKlasse

Ermöglicht das Iterieren über einen RecursiveIterator, um einen ASCII-Grafikbaum zu generieren.

$treeIterator = new RecursiveTreeIterator(
    new RecursiveDirectoryIterator('/path/to/dir'),
    RecursiveTreeIterator::SELF_FIRST);

foreach($treeIterator as $val) echo $val, PHP_EOL;

Die Ausgabe wird ungefähr so ​​aussehen (mit c: \ php auf meinem Computer):

|-c:\php5\cfg
|-c:\php5\data
| |-c:\php5\data\Base
| | \-c:\php5\data\Base\design
| |   |-c:\php5\data\Base\design\class_diagram.png
| |   \-c:\php5\data\Base\design\design.txt
| |-c:\php5\data\ConsoleTools
| | \-c:\php5\data\ConsoleTools\design
| |   |-c:\php5\data\ConsoleTools\design\class_diagram.png
| |   |-c:\php5\data\ConsoleTools\design\console.png
| |   |-c:\php5\data\ConsoleTools\design\console.xml
…

9

exa mit --tree macht einen exzellenten Job:

exa --tree ~/tmp/public/

<dir>
├── aboutme
│  └── index.html
├── atrecurse
│  └── index.html
├── base.css
├── html5
│  ├── cat-and-mouse
│  └── frantic
│     ├── css
│     │  └── main.css

Fand so spät, aber das ist großartig! Die Entwicklung eines Tools zum Generieren des Dateibaums für einen bestimmten Projekttyp exa -T -Dwar wirklich sehr hilfreich. Vielen Dank!
Kingkupps



1

[php] Zum Optimieren der Baumsymbole unter https://gist.github.com/hakre/3599532

<?php
$path = './targetdir';
$unicodeTreePrefix = function(RecursiveTreeIterator $tree){
  $prefixParts = [
      RecursiveTreeIterator::PREFIX_LEFT         => ' ',
      RecursiveTreeIterator::PREFIX_MID_HAS_NEXT => '+ ',
      RecursiveTreeIterator::PREFIX_END_HAS_NEXT => '├ ',
      RecursiveTreeIterator::PREFIX_END_LAST     => '└ '
    ];
  foreach ($prefixParts as $part => $string) {
      $tree->setPrefixPart($part, $string);
  }
};
$dir  = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_FILENAME | RecursiveDirectoryIterator::SKIP_DOTS);
$tree = new RecursiveTreeIterator($dir);
$unicodeTreePrefix($tree);
echo "<br><br>";
echo "[$path]<br>";
foreach ($tree as $filename => $line) {
  echo $tree->getPrefix(), $filename, "<br>";
}

Beispielausgabe

[./targetdir]<br> ├ aHR0cHM<br> ├ gtyyu.txt<br> ├ Screenshot at 2020-05-28 22-23-30.png<br> ├ 2004 - Synchrone<br> + ├ 09-Live for willyman.mp3<br> + ├ 04-Inabox.mp3<br> + ├ 05-Trashastan.mp3<br> + ├ 07-Nordick.mp3<br> + ├ 08-Rupture.mp3<br> + ├ Best of<br> + + ├ 08 - Civil War.mp3<br> + + ├ 09 - 14 Years.mp3<br> + + ├ 05 - Welcome To The Jungle.mp3<br> + + ├ 06 - Don't Cry.mp3<br> + + ├ 04 - Sweet Child O' Mine.mp3<br> + + ├ 02 - Paradise City.mp3<br> + + ├ 07 - Yesterdays.mp3<br> + + ├ 03 - Patience.mp3<br> + + ├ 01 - November Rain.mp3<br> + + └ 10 - Estranged.mp3<br> + ├ 03-Sarangui.mp3<br> + ├ 06-The test.mp3<br> + ├ 01-Sabradub.mp3<br> + └ 02-L'uzure.mp3<br> ├ Screenshot at 2020-02-11 12-31-52.png<br> ├ trur.txt<br> ├ .hidden<br> + ├ .sub_article.txt<br> + └ sub_article_in_hidden.txt<br> ├ gtuitre.txt<br> ├ aHR0cHM.txt<br> ├ CREEP.mp3<br> ├ subfolder<br> + └ sub_article.txt<br> ├ filtle.txt<br> ├ Best of<br> + ├ 08 - Civil War.mp3<br> + ├ 09 - 14 Years.mp3<br> + ├ 05 - Welcome To The Jungle.mp3<br> + ├ 06 - Don't Cry.mp3<br> + ├ 04 - Sweet Child O' Mine.mp3<br> + ├ 02 - Paradise City.mp3<br> + ├ 07 - Yesterdays.mp3<br> + ├ 03 - Patience.mp3<br> + ├ 01 - November Rain.mp3<br> + └ 10 - Estranged.mp3<br> ├ Screenshot at 2020-05-12 14-51-56.png<br> ├ of.txt<br> ├ highlight.css<br> └ Screenshot at 2020-06-10 19-28-51.png<br>


1

Dies hat sich in den letzten Jahren stark weiterentwickelt. Die Linux-Version in den Paketmanagern ist sauberer und farbiger:

Debian / Ubuntu:

sudo apt install tree

CentOS / RHEL / OpenSUSE:

sudo yum install tree

Wenn Sie ein umfangreiches Unterverzeichnis Ihrer current_directoryStruktur haben und nur ein Beispiel dessen zeigen möchten, was die Struktur enthält, können Sie Folgendes tun:

tree -P *my_own_pattern_to_find* current_directory

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.