Darstellung der Verzeichnis- und Dateistruktur in der Markdown-Syntax

213

Ich möchte Verzeichnis- und Dateistrukturen in einigen meiner Jekyll-Blog-Beiträge beschreiben. Bietet Markdown eine gute Möglichkeit, so etwas auszugeben?

Unter diesem Link auf der Jekyll-Website können Sie beispielsweise sehen, dass die Verzeichnis- und Dateistruktur auf der Seite sehr übersichtlich ausgegeben wird:

.
├── _config.yml
├── _drafts
│   ├── begin-with-the-crazy-ideas.textile
│   └── on-simplicity-in-technology.markdown
├── _includes
│   ├── footer.html
│   └── header.html
├── _layouts
│   ├── default.html
│   └── post.html
├── _posts
│   ├── 2007-10-29-why-every-programmer-should-play-nethack.textile
│   └── 2009-04-26-barcamp-boston-4-roundup.textile
├── _data
│   └── members.yml
├── _site
└── index.html

Ich glaube, dass die obigen Zeilenblockzeichen Unicode sind (wie in dieser Antwort hier beschrieben ), aber ich bin nicht sicher, wie Markdown oder andere Browser damit umgehen werden. Ich hatte gehofft, dass Markdown eine Möglichkeit dazu enthalten hatte, die vielleicht als Unicode-Zeichen oben ausgegeben wird.

Matt Rowles
quelle
1
Da Sie Jekyll speziell erwähnt haben, könnte dieses No-Fluff- Beispiel und seine Quelle in die Rechnung passen
user3276552

Antworten:

142

Wenn Sie sich Gedanken über Unicode-Zeichen machen, können Sie die Strukturen mit ASCII erstellen, sodass Ihre Beispielstruktur wird

.
+-- _config.yml
+-- _drafts
|   +-- begin-with-the-crazy-ideas.textile
|   +-- on-simplicity-in-technology.markdown
+-- _includes
|   +-- footer.html
|   +-- header.html
+-- _layouts
|   +-- default.html
|   +-- post.html
+-- _posts
|   +-- 2007-10-29-why-every-programmer-should-play-nethack.textile
|   +-- 2009-04-26-barcamp-boston-4-roundup.textile
+-- _data
|   +-- members.yml
+-- _site
+-- index.html

Dies ähnelt dem Format, treedas bei Auswahl der ANSIAusgabe verwendet wird.

RobertKenny
quelle
1
Danke dafür. Sollte es dennoch Bedenken hinsichtlich der Verwendung der Unicode-Zeichen geben? Wie bekannte Probleme mit älteren Browsern, falsches Markdown-Rendering usw.
Matt Rowles
2
Es sollte kein Problem mit Markdown geben, es wird auf Ihren Jekyll-Vorlagen und den Webbrowsern der Benutzer sein.
RobertKenny
1
Ein weiterer Vorteil dieser Auswahl sind kleinere Unterschiede im Vergleich zu anderen Auswahlmöglichkeiten, bei denen nur aus kosmetischen Gründen unterschiedliche Symbole verwendet werden (wie die Ausgabe von tree).
Villasv
1
Bei Verwendung dieser Antwort wird der Baum nur als einige Textzeilen gerendert. Getestet in VSCode und VisualStudio mit md Plugin. Auch auf GitHub funktioniert dies nicht
Danny
237

Ich folgte einem Beispiel in einem anderen Repository und verpackte die Verzeichnisstruktur in ein Paar dreifacher Backticks ( ```):

```
project
│   README.md
│   file001.txt    
│
└───folder1
│   │   file011.txt
│   │   file012.txt
│   │
│   └───subfolder1
│       │   file111.txt
│       │   file112.txt
│       │   ...
│   
└───folder2
    │   file021.txt
    │   file022.txt
```
user799188
quelle
5
Der Stapelüberlauf unterstützt die neuere Triple-Backtick-Syntax nicht. es interpretiert sie als einzelne Backticks. Einzelne Backticks markieren Code als Inline-Text, nur innerhalb einer einzelnen Zeile. Deshalb hat Ihr Beispiel weiße Streifen zwischen jeder Zeile. Um eine mehrkompatible Methode zum Markieren von mehrzeiligem Code zu erhalten, rücken Sie den Text um vier Leerzeichen ein.
Rory O'Kane
3
Während SO den Triple-Backtick nicht unterstützt, tun dies die meisten anderen MD-Implementierungen (wie Github / BitBucket), und dies war die einzige Möglichkeit, einen Baum zum Laufen zu bringen, der Inline-Kommentare zu den einzelnen Einträgen enthielt. Also .. +1 von hier!
Scott Byers
1
Daumen hoch für diese Antwort. Triple Backticks Markdown funktioniert auch bei Wordpress.
Binita Bharati
Die Triple-Backtick-Unterstützung scheint jetzt auf SO zu funktionieren.
StriplingWarrior
41

Sie können einen Baum verwenden , um etwas zu generieren, das Ihrem Beispiel sehr ähnlich ist. Sobald Sie die Ausgabe haben, können Sie sie in ein <pre>Tag einschließen, um die Nur-Text-Formatierung beizubehalten.

Cameron Spickert
quelle
Cool, das sieht hilfreich aus, danke! Aber was ist mit theoretischen Dateistrukturen? Wenn dies im Moment die einzige Lösung ist, muss ich möglicherweise nur die benötigten Zeichen kopieren und einfügen. Nochmals Prost.
Matt Rowles
Ich mag diese Lösung. Schauen Sie ordentlich in Markdown
Anh Tuan
22

Ich habe ein Knotenmodul erstellt, um diese Aufgabe zu automatisieren: mddir

Verwendung

Knoten mddir "../relative/path/"

So installieren Sie: npm install mddir -g

So generieren Sie einen Abschlag für das aktuelle Verzeichnis: mddir

So generieren Sie für einen beliebigen absoluten Pfad: mddir / absolute / path

So generieren Sie für einen relativen Pfad: mddir ~ / Documents / Whatever.

Die MD-Datei wird in Ihrem Arbeitsverzeichnis generiert.

Ignoriert derzeit die Ordner node_modules und .git.

Fehlerbehebung

Wenn Sie die Fehlermeldung 'node \ r: Keine solche Datei oder kein solches Verzeichnis' erhalten, besteht das Problem darin, dass Ihr Betriebssystem unterschiedliche Zeilenenden verwendet und mddir diese nicht analysieren kann, ohne dass Sie den Zeilenendenstil explizit auf Unix setzen. Dies betrifft normalerweise Windows, aber auch einige Linux-Versionen. Das Festlegen von Zeilenenden auf den Unix-Stil muss im globalen bin-Ordner mddir npm erfolgen.

Zeilenenden reparieren

Holen Sie sich den npm bin Ordnerpfad mit:

npm config get prefix

CD in diesen Ordner

brauen install dos2unix

dos2unix lib / node_modules / mddir / src / mddir.js

Dadurch werden Zeilenenden in Unix anstelle von Dos konvertiert

Führen Sie dann wie gewohnt aus mit: node mddir "../relative/path/".

Beispiel generierte Markdown-Dateistruktur 'directoryList.md'

    |-- .bowerrc
    |-- .jshintrc
    |-- .jshintrc2
    |-- Gruntfile.js
    |-- README.md
    |-- bower.json
    |-- karma.conf.js
    |-- package.json
    |-- app
        |-- app.js
        |-- db.js
        |-- directoryList.md
        |-- index.html
        |-- mddir.js
        |-- routing.js
        |-- server.js
        |-- _api
            |-- api.groups.js
            |-- api.posts.js
            |-- api.users.js
            |-- api.widgets.js
        |-- _components
            |-- directives
                |-- directives.module.js
                |-- vendor
                    |-- directive.draganddrop.js
            |-- helpers
                |-- helpers.module.js
                |-- proprietary
                    |-- factory.actionDispatcher.js
            |-- services
                |-- services.cardTemplates.js
                |-- services.cards.js
                |-- services.groups.js
                |-- services.posts.js
                |-- services.users.js
                |-- services.widgets.js
        |-- _mocks
            |-- mocks.groups.js
            |-- mocks.posts.js
            |-- mocks.users.js
            |-- mocks.widgets.js
John Byrne
quelle
1
Leider habe ich dies versucht und es funktioniert nicht auf meinem Windows 10-Computer, und es scheint, dass das Projekt abgebrochen wurde.
Rich Hopkins
1
Hallo, danke, dass du die Bibliothek ausprobiert hast. Ich war mit anderen Projekten beschäftigt und kann nicht replizieren, habe aber eine mögliche Lösung gefunden. Holen Sie sich den Ordnerpfad von npm bin mit: 'npm config get prefix'. CD in diesen Ordner, dann 'Brew Install Dos2unix' und 'Dos2unix Lib / Node_Modules / Mddir / Src / Mddir.js' ausführen. Dadurch werden Zeilenenden in Unix anstelle von Dos konvertiert. Führen Sie dann wie gewohnt aus mit: node mddir "../relative/path/".
John Byrne
Arbeitete auf meinem Windows 10-Computer, ordentliches kleines Dienstprogramm - danke!
John Kattenhorn
19

Wie bereits empfohlen, können Sie verwenden tree. Für die Verwendung zusammen mit umstrukturiertem Text waren jedoch einige zusätzliche Parameter erforderlich.

Die Standardausgabe treewird nicht gedruckt, wenn Sie PDF-Dateien pandocerstellen.

tree --dirsfirst --charset=ascii /path/to/directoryerzeugt einen schönen ASCIIBaum, der wie folgt in Ihr Dokument integriert werden kann:

.. code::
.
|-- ContentStore
|   |-- de-DE
|   |   |-- art.mshc
|   |   |-- artnoloc.mshc
|   |   |-- clientserver.mshc
|   |   |-- noarm.mshc
|   |   |-- resources.mshc
|   |   `-- windowsclient.mshc
|   `-- en-US
|       |-- art.mshc
|       |-- artnoloc.mshc
|       |-- clientserver.mshc
|       |-- noarm.mshc
|       |-- resources.mshc
|       `-- windowsclient.mshc
`-- IndexStore
    |-- de-DE
    |   |-- art.mshi
    |   |-- artnoloc.mshi
    |   |-- clientserver.mshi
    |   |-- noarm.mshi
    |   |-- resources.mshi
    |   `-- windowsclient.mshi
    `-- en-US
        |-- art.mshi
        |-- artnoloc.mshi
        |-- clientserver.mshi
        |-- noarm.mshi
        |-- resources.mshi
        `-- windowsclient.mshi
Aronadaal
quelle
8

Ich habe dies für meine Dropbox-Dateiliste geschrieben.

sed wird zum Entfernen der vollständigen Pfade des nachfolgenden Symbols für verknüpfte Dateien / Ordner verwendet ->

Leider gehen Tabs verloren. Mit kann zshich Tabs beibehalten.

! / usr / bin / env bash

#!/usr/bin/env zsh

F1='index-2.md' #With hyperlinks
F2='index.md'

if [ -e $F1 ];then
    rm $F1
fi

if [ -e $F2 ];then
    rm $F2
fi

DATA=`tree --dirsfirst -t -Rl --noreport | \
    sed 's/->.*$//g'`             # Remove symlink adress and ->

echo -e '```\n' ${DATA} '\n```' > $F1  # Markdown needs triple back ticks for <pre>

# With the power of piping, creating HTML tree than pipe it
# to html2markdown program, creates cool markdown file with hyperlinks.

DATA=`tree --dirsfirst -t -Rl --noreport -H http://guneysu.pancakeapps.com`
echo $DATA | \
    sed 's/\r\r/\n/g' | \
    html2markdown | \
    sed '/^\s*$/d' | \
    sed 's/\# Directory Tree//g' | \
        > $F2

Die Ausgaben wie folgt:

```
 .
├── 2013 
│   └── index.markdown
├── 2014 
│   └── index.markdown
├── 2015 
│   └── index.markdown
├── _posts 
│   └── 2014-12-27-2014-yili-degerlendirmesi.markdown
├── _stash 
└── update.sh 
```

[BASE_URL/](BASE_URL/)
├── [2013](BASE_URL/2013/)
│   └── [index.markdown](BASE_URL/2013/index.markdown)
├── [2014](BASE_URL/2014/)
│   └── [index.markdown](BASE_URL/2014/index.markdown)
├── [2015](BASE_URL/2015/)
│   └── [index.markdown](BASE_URL/2015/index.markdown)
├── [_posts](BASE_URL/_posts/)
│   └── [2014-12-27-2014-yili-degerlendirmesi.markdown](_posts/2014-12-27-2014-yili-degerlendirmesi.markdown)
├── [_stash](BASE_URL/_stash/)
├── [index-2.md](BASE_URL/index-2.md)
└── [update.sh](BASE_URL/update.sh)
* * *
tree v1.6.0 © 1996 - 2011 by Steve Baker and Thomas Moore
HTML output hacked and copyleft © 1998 by Francesc Rocher
Charsets / OS/2 support © 2001 by Kyosuke Tokoro
Guneysos
quelle
7

Wenn Sie den Atom-Editor verwenden, können Sie dies mit dem ASCII-Tree- Paket erreichen.

Sie können den folgenden Baum schreiben:

root
+-- dir1
    +--file1
+-- dir2
    +-- file2

und konvertieren Sie es in Folgendes, indem Sie es auswählen und drücken ctrl-alt-t:

root
├── dir1
│   └── file1
└── dir2
    └── file2
Ramtin Soltani
quelle
5

Unter OSX habe reveal.jsich ein Rendering-Problem, wenn ich nur Benutzer bin treeund dann die Ausgabe kopiere / einfüge: Es erscheinen seltsame Symbole.

Ich habe 2 mögliche Lösungen gefunden.

1) Verwenden Sie charset ascii und kopieren Sie die Ausgabe einfach in die Markdown-Datei

tree -L 1 --charset=ascii

2) Verwenden Sie direkt HTML und Unicode in der Markdown-Datei

<pre>
.
&#8866; README.md
&#8866; docs
&#8866; e2e
&#8866; karma.conf.js
&#8866; node_modules
&#8866; package.json
&#8866; protractor.conf.js
&#8866; src
&#8866; tsconfig.json
&#8985; tslint.json
</pre>

Ich hoffe es hilft.

Felix bei der Hauskatze
quelle
4

Ich würde vorschlagen, Wasabi zu verwenden, dann können Sie entweder das Markdown-Gefühl so verwenden

root/ # entry comments can be inline after a '#'
      # or on their own line, also after a '#'

  readme.md # a child of, 'root/', it's indented
            # under its parent.

  usage.md  # indented syntax is nice for small projects
            # and short comments.

  src/          # directories MUST be identified with a '/'
    fileOne.txt # files don't need any notation
    fileTwo*    # '*' can identify executables
    fileThree@  # '@' can identify symlinks

und werfen diese genaue Syntax in der js Bibliothek für diese

Wasabi Beispiel

user3276552
quelle
1

Wenn Sie es dynamisch generieren möchten, empfehle ich die Verwendung von Frontend-md . Es ist einfach zu bedienen.

Bruno Wego
quelle
1

Hierfür gibt es ein NPM-Modul:

npm dree

Sie können einen Verzeichnisbaum als Zeichenfolge oder Objekt darstellen. Wenn Sie es mit der Befehlszeile verwenden, können Sie die Darstellung in einer txt-Datei speichern.

Beispiel:

$ npm dree parse myDirectory --dest ./generated --name tree
EuberDeveloper
quelle