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
Alan Storm
quelle
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/-/|/'  
bobbymcr
quelle
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
user1116793
quelle
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.

Ibrahim
quelle
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
…
Gordon
quelle
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
Andy Boot
quelle
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
2

Keine Bibliothek an sich, aber dieses kleine Dienstprogramm ist praktisch, um schnelle Baumdiagramme zu erstellen, ohne den Browser zu verlassen: https://tree.nathanfriend.io/

Haftungsausschluss: Ich bin der Autor :).

Nathan Freund
quelle
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>

NVRM
quelle
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
Eamonn Kenny
quelle