Merupakan Direktori & Struktur File dalam Sintaks Markdown

215

Saya ingin menggambarkan struktur direktori & file di beberapa posting blog Jekyll saya, apakah Markdown menyediakan cara yang rapi untuk menghasilkan hal seperti itu?

Sebagai contoh, Anda dapat melihat di tautan ini di situs web Jekyll bahwa direktori & struktur file dihasilkan pada halaman dengan sangat rapi:

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

Saya percaya karakter blok baris di atas adalah Unicode (seperti dijelaskan dalam jawaban ini di sini ), tetapi saya tidak yakin bagaimana Markdown atau browser yang berbeda akan menanganinya. Saya berharap bahwa Markdown telah memasukkan beberapa cara untuk melakukan ini yang keluar sebagai karakter Unicode di atas mungkin.

Matt Rowles
sumber
1
karena Anda menyebutkan jekyll secara khusus, contoh tanpa bulu dan sumbernya mungkin sesuai dengan tagihan
user3276552

Jawaban:

144

Jika Anda khawatir tentang karakter Unicode Anda dapat menggunakan ASCII untuk membangun struktur, jadi struktur contoh Anda menjadi

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

Yang mirip dengan format yang treedigunakan jika Anda memilih ANSIoutput.

RobertKenny
sumber
1
Terima kasih untuk ini. Haruskah ada kekhawatiran tentang penggunaan karakter Unicode? Seperti masalah yang diketahui dengan browser lama, rendering Markdown salah dll
Matt Rowles
2
Seharusnya tidak ada masalah dengan Markdown, itu akan ada di template Jekyll Anda dan browser web pengguna.
RobertKenny
1
Keuntungan lain dari pilihan ini adalah perbedaan yang lebih kecil dibandingkan dengan pilihan lain yang menggunakan simbol yang berbeda hanya untuk alasan kosmetik (seperti keluaran dari tree).
villasv
1
Saat menggunakan anwser ini, tree hanya renderd sebagai beberapa baris teks. Diuji dalam VSCode dan VisualStudio dengan plugin md. Juga di GitHub ini tidak berfungsi
Danny
239

Saya mengikuti contoh di repositori lain dan membungkus struktur direktori dengan sepasang triple backticks ( ```):

```
project
│   README.md
│   file001.txt    
│
└───folder1
│   │   file011.txt
│   │   file012.txt
│   │
│   └───subfolder1
│       │   file111.txt
│       │   file112.txt
│       │   ...
│   
└───folder2
    │   file021.txt
    │   file022.txt
```
pengguna799188
sumber
5
Stack Overflow tidak mendukung sintaks triple-backtick yang lebih baru; itu menafsirkannya sebagai backticks tunggal. Kode tanda backticks tunggal sebagai teks sebaris, hanya dalam satu baris; itu sebabnya contoh Anda memiliki garis putih di antara setiap baris. Untuk cara yang kompatibel untuk menandai kode multi-baris, inden teks dengan empat spasi.
Rory O'Kane
3
Sementara SO tidak mendukung triple-backtick, kebanyakan implementasi MD lainnya melakukannya (seperti Github / BitBucket) dan ini adalah satu-satunya cara saya bisa membuat pohon bekerja yang memiliki komentar sebaris tentang apa setiap entri. Jadi .. +1 dari sini!
Scott Byers
1
Jempol untuk jawaban ini. Triple backticks markdown juga berfungsi untuk saya di Wordpress.
Binita Bharati
Dukungan triple-backtick tampaknya berfungsi pada SO sekarang.
StriplingWarrior
41

Anda dapat menggunakan pohon untuk menghasilkan sesuatu yang sangat mirip dengan contoh Anda. Setelah Anda memiliki output, Anda dapat membungkusnya dalam <pre>tag untuk mempertahankan format teks biasa.

Cameron Spickert
sumber
Keren, ini terlihat sangat membantu, terima kasih! Tapi bagaimana dengan struktur file teoritis? Jika ini adalah satu-satunya solusi saat ini, saya kira saya mungkin harus menyalin dan menempelkan karakter yang saya butuhkan. Ceria lagi.
Matt Rowles
Saya suka solusi ini. Terlihat rapi di Markdown
Anh Tuan
28

Jika Anda menggunakan Kode VS, ini adalah ekstensi yang luar biasa untuk menghasilkan pohon file. https://marketplace.visualstudio.com/items?itemName=Shinotatwu-DS.file-tree-generator

Ditambahkan langsung ke penurunan harga ...

📦quakehunter
 ┣ 📂client
 ┣ 📂node_modules
 ┣ 📂server
 ┃ ┗ 📜index.js
 ┣ 📜.gitignore
 ┣ 📜package-lock.json
 ┗ 📜package.json
Will Ward
sumber
Ini luar biasa.
Steph M
22

Saya membuat modul simpul untuk mengotomatiskan tugas ini: mddir

Pemakaian

simpul mddir "../relative/path/"

Untuk menginstal: npm install mddir -g

Untuk menghasilkan penurunan harga untuk direktori saat ini: mddir

Untuk menghasilkan untuk setiap path absolut: mddir / absolute / path

Untuk menghasilkan jalur relatif: mddir ~ / Documents / whatever.

File md dihasilkan di direktori kerja Anda.

Saat ini mengabaikan node_modules, dan folder .git.

Penyelesaian masalah

Jika Anda menerima kesalahan 'simpul \ r: Tidak ada file atau direktori', masalahnya adalah bahwa sistem operasi Anda menggunakan akhiran baris yang berbeda dan mddir tidak dapat menguraikannya tanpa Anda secara eksplisit mengatur gaya akhiran baris ke Unix. Ini biasanya mempengaruhi Windows, tetapi juga beberapa versi Linux. Pengaturan akhir baris ke gaya Unix harus dilakukan dalam folder bin global mddir npm.

Memperbaiki ujung garis

Dapatkan jalur folder npm bin dengan:

npm config get prefix

Cd ke folder itu

buat instalasi dos2unix

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

Ini mengubah akhiran baris menjadi Unix dan bukan Dos

Kemudian jalankan seperti biasa dengan: node mddir "../relative/path/".

Contoh menghasilkan struktur file penurunan direktori '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
sumber
1
Sayangnya, saya mencoba ini, dan itu tidak berfungsi pada mesin Windows 10 saya, dan tampaknya proyek tersebut telah ditinggalkan.
Rich Hopkins
1
Hai, terima kasih telah mencoba perpustakaan. Saya sibuk dengan proyek lain dan tidak bisa meniru tetapi menemukan kemungkinan perbaikan. Dapatkan jalur folder npm bin dengan: 'npm config get prefix'. Cd ke folder itu, lalu jalankan 'brew install dos2unix', jalankan 'dos2unix lib / node_modules / mddir / src / mddir.js'. Ini mengubah akhiran baris menjadi Unix dan bukan Dos. Kemudian jalankan seperti biasa dengan: node mddir "../relative/path/".
John Byrne
Bekerja pada mesin Windows 10 saya, utilitas kecil yang rapi - terima kasih!
John Kattenhorn
19

Seperti yang sudah direkomendasikan, Anda bisa menggunakan tree. Tetapi untuk menggunakannya bersama dengan teks yang direstrukturisasi beberapa parameter tambahan diperlukan.

treeOutput standar tidak akan dicetak jika Anda menggunakan pandocuntuk menghasilkan pdf.

tree --dirsfirst --charset=ascii /path/to/directoryakan menghasilkan ASCIIpohon yang bagus yang dapat diintegrasikan ke dalam dokumen Anda seperti ini:

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

Saya menulis ini untuk daftar file Dropbox saya.

sed digunakan untuk menghapus path lengkap jalur file / folder yang disinkronkan setelahnya ->

Sayangnya, tab hilang. Menggunakan zshsaya dapat menyimpan tab.

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

Outputnya seperti ini:

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

Jika Anda menggunakan editor Atom, Anda dapat melakukannya dengan paket ascii-tree .

Anda dapat menulis pohon berikut:

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

dan mengonversinya menjadi yang berikut dengan memilihnya dan menekan ctrl-alt-t:

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

Di bawah OSX, menggunakan reveal.js, saya punya masalah rendering jika saya hanya pengguna treedan kemudian salin / tempel output: simbol aneh muncul.

Saya telah menemukan 2 kemungkinan solusi.

1) Gunakan charset ascii dan cukup salin / tempel output dalam file penurunan harga

tree -L 1 --charset=ascii

2) Gunakan langsung HTML dan unicode dalam file penurunan harga

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

Semoga ini bisa membantu.

felix di housecat
sumber
4

Saya sarankan menggunakan wasabi maka Anda bisa menggunakan markdown-ish merasa seperti ini

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

dan membuang sintaks yang tepat di perpustakaan js untuk ini

contoh wasabi

pengguna3276552
sumber
1

Jika Anda ingin membuatnya secara dinamis, saya sarankan menggunakan Frontend-md . Mudah digunakan.

Bruno Wego
sumber
1

Ada modul NPM untuk ini:

npm dree

Ini memungkinkan Anda untuk memiliki representasi pohon direktori sebagai string atau objek. Menggunakannya dengan baris perintah akan memungkinkan Anda untuk menyimpan representasi dalam file txt.

Contoh:

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