Reprezentowanie struktury katalogów i plików w składni Markdown


214

Chcę opisać struktury katalogów i plików w niektórych moich postach na blogu Jekyll, czy Markdown zapewnia dobry sposób na wyprowadzenie czegoś takiego?

Na przykład możesz zobaczyć pod tym linkiem na stronie Jekyll, że struktura katalogów i plików jest bardzo ładnie wyświetlana na stronie:

.
├── _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

Wydaje mi się, że powyższe znaki bloku linii to Unicode (jak opisano w tej odpowiedzi tutaj ), ale nie jestem pewien, jak Markdown lub inne przeglądarki będą je obsługiwać. Miałem nadzieję, że Markdown podał jakiś sposób na zrobienie tego, co może wynikać z powyższych znaków Unicode.



1
skoro wspomniałeś konkretnie o jekyllu, ten przykład bez puchu i jego źródło mogą pasować do rachunku
użytkownik3276552

Odpowiedzi:


143

Jeśli obawiasz się znaków Unicode, możesz użyć ASCII do budowania struktur, więc twoja przykładowa struktura staje się

.
+-- _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

Który jest podobny do formatu treeużywanego po wybraniu ANSIwyjścia.


1
Dzięki za to. Czy powinny być jednak jakieś obawy dotyczące używania znaków Unicode? Takie jak znane problemy ze starszymi przeglądarkami, niepoprawne renderowanie Markdown itp.
Matt Rowles,

2
Markdown nie powinien mieć żadnego problemu, będzie on dostępny w szablonach Jekyll i przeglądarkach użytkowników.
RobertKenny,

1
Kolejną zaletą tego wyboru są mniejsze różnice w porównaniu z innymi wyborami, które używają różnych symboli wyłącznie ze względów kosmetycznych (jak na przykład wynik tree).
villasv

1
Podczas korzystania z tej odpowiedzi drzewo jest renderowane jako kilka wierszy tekstu. Testowane w VSCode i VisualStudio z wtyczką md. Również w GitHub to nie działa
Danny,

237

Podążyłem za przykładem z innego repozytorium i zawinąłem strukturę katalogów w parę potrójnych backticks ( ```):

```
project
│   README.md
│   file001.txt    
│
└───folder1
│   │   file011.txt
│   │   file012.txt
│   │
│   └───subfolder1
│       │   file111.txt
│       │   file112.txt
│       │   ...
│   
└───folder2
    │   file021.txt
    │   file022.txt
```

5
Przepełnienie stosu nie obsługuje nowszej składni potrójnego cofania; interpretuje je jako pojedyncze uderzenia wsteczne. Pojedyncze znaki wsteczne oznaczają kod jako tekst wstawiany, tylko w jednym wierszu; dlatego twój przykład ma białe paski między każdą linią. Aby uzyskać zgodny sposób oznaczania kodu wieloliniowego, należy wciąć tekst o cztery spacje.
Rory O'Kane

3
Podczas gdy SO nie obsługuje potrójnego backticka, większość innych implementacji MD to robi (np. Github / BitBucket) i to był jedyny sposób, w jaki mogłem uzyskać działające drzewo z wbudowanymi komentarzami co do tego, jaki był każdy wpis. Więc .. +1 stąd!
Scott Byers,

1
Kciuki za tę odpowiedź. Potrójne markowanie backticks działa również dla mnie na Wordpress.
Binita Bharati

Wygląda na to, że obsługa potrójnego backticka działa teraz na SO.
StriplingWarrior

41

Możesz użyć drzewa, aby wygenerować coś bardzo podobnego do twojego przykładu. Po uzyskaniu wyniku możesz zawinąć go w <pre>znacznik, aby zachować formatowanie zwykłego tekstu.


Fajnie, to wygląda pomocne dzięki! Ale co z teoretycznymi strukturami plików? Jeśli w tej chwili jest to jedyne rozwiązanie, być może będę musiał skopiować i wkleić potrzebne mi znaki. Znowu zdrowie
Matt Rowles,

Podoba mi się to rozwiązanie. Spójrz ładnie w Markdown
Anh Tuan


22

Zrobiłem moduł węzła, aby zautomatyzować to zadanie: mddir

Stosowanie

węzeł mddir „../relative/path/”

Aby zainstalować: npm install mddir -g

Aby wygenerować przecenę dla bieżącego katalogu: mddir

Aby wygenerować dla dowolnej ścieżki bezwzględnej: mddir / absolut / ścieżka

Aby wygenerować dla ścieżki względnej: mddir ~ / Documents /okolwiek.

Plik md zostanie wygenerowany w katalogu roboczym.

Obecnie ignoruje moduły node_modules i .git.

Rozwiązywanie problemów

Jeśli pojawi się błąd „node \ r: Brak takiego pliku lub katalogu”, problem polega na tym, że twój system operacyjny używa różnych zakończeń linii i mddir nie może ich przetworzyć bez wyraźnego ustawienia stylu zakończenia linii na Unix. Zwykle dotyczy to systemu Windows, ale także niektórych wersji systemu Linux. Ustawienie zakończenia linii na styl uniksowy należy wykonać w globalnym folderze bin mddir npm.

Naprawić zakończenia linii

Uzyskaj ścieżkę folderu bin npm za pomocą:

npm config get prefix

Cd do tego folderu

napar zainstaluj dos2unix

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

Konwertuje to zakończenia linii na Unix zamiast Dos

Następnie uruchom normalnie z: node mddir „../relative/path/”.

Przykładowa wygenerowana struktura pliku Markdown „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

1
Niestety próbowałem tego i nie działa na moim komputerze z systemem Windows 10 i wydaje się, że projekt został porzucony.
Rich Hopkins

1
Cześć, dziękuję za wypróbowanie biblioteki. Byłem zajęty innymi projektami i nie mogę się replikować, ale znalazłem możliwą poprawkę. Uzyskaj ścieżkę folderu bin npm z: 'npm config get prefix'. Cd do tego folderu, a następnie uruchom „brew install dos2unix”, uruchom „dos2unix lib / node_modules / mddir / src / mddir.js”. Konwertuje to zakończenia linii na Unix zamiast Dos. Następnie uruchom normalnie z: node mddir „../relative/path/”.
John Byrne,

Pracowałem na moim komputerze z systemem Windows 10, schludne małe narzędzie - dzięki!
John Kattenhorn,

19

Jak już zalecono, możesz użyć tree. Ale do korzystania z niego wraz ze zmienionym tekstem wymagane były dodatkowe parametry.

Standardowe treewyjście nie zostanie wydrukowane, jeśli używasz pandocdo tworzenia pdf.

tree --dirsfirst --charset=ascii /path/to/directorystworzy ładne ASCIIdrzewo, które można zintegrować z dokumentem w następujący sposób:

.. 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

8

Skryptowałem to dla mojej listy plików Dropbox.

sed służy do usuwania pełnych ścieżek dowiązań do plików / folderów znajdujących się po ->

Niestety karty zostały utracone. Za pomocązsh Jestem w stanie zachować zakładki.

! / 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

Wyjścia takie jak to:

```
 .
├── 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

7

Jeśli używasz edytora Atom, możesz to zrobić za pomocą pakietu ascii-tree .

Możesz napisać następujące drzewo:

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

i przekonwertuj go na następujący, wybierając go i naciskając ctrl-alt-t:

root
├── dir1
│   └── file1
└── dir2
    └── file2

5

W OSX, używając reveal.js, mam problem z renderowaniem, jeśli tylko użytkownik, treea następnie skopiuj / wklej dane wyjściowe: pojawiają się dziwne symbole.

Znalazłem 2 możliwe rozwiązania.

1) Użyj charset ascii i po prostu skopiuj / wklej dane wyjściowe w pliku markdown

tree -L 1 --charset=ascii

2) Użyj bezpośrednio HTML i Unicode w pliku przeceny

<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>

Mam nadzieję, że to pomoże.


4

Sugerowałbym użycie wasabi, wtedy możesz albo użyć markdown-ish w ten sposób

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

i rzucać, że dokładnej składni w js biblioteki dla tego

przykład wasabi



1

Do tego celu służy moduł NPM:

npm dree

Pozwala mieć reprezentację drzewa katalogów jako łańcucha lub obiektu. Używanie go z wierszem poleceń pozwoli ci zapisać reprezentację w pliku txt.

Przykład:

$ npm dree parse myDirectory --dest ./generated --name tree
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.