Đại diện cho cấu trúc thư mục và tệp trong cú pháp Markdown


213

Tôi muốn mô tả cấu trúc thư mục và tệp trong một số bài đăng trên blog Jekyll của mình, Markdown có cung cấp một cách gọn gàng để xuất ra một thứ như vậy không?

Ví dụ: bạn có thể thấy tại liên kết này trên trang web Jekyll rằng cấu trúc thư mục & tệp được xuất ra trên trang rất gọn gàng:

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

Tôi tin rằng các ký tự khối dòng ở trên là Unicode (như được mô tả trong câu trả lời này ở đây ), nhưng tôi không chắc chắn cách Markdown hoặc các trình duyệt khác nhau sẽ xử lý chúng. Tôi đã hy vọng rằng Markdown đã bao gồm một số cách để làm điều này mà xuất ra như các ký tự Unicode ở trên có lẽ.



1
kể từ khi bạn đề cập đến jekyll một cách cụ thể, ví dụ không có lông tơ này và nguồn của nó có thể phù hợp với hóa đơn
user3276552

Câu trả lời:


142

Nếu bạn lo ngại về các ký tự Unicode, bạn có thể sử dụng ASCII để xây dựng các cấu trúc, do đó cấu trúc ví dụ của bạn trở thành

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

Tương tự với định dạng treesử dụng nếu bạn chọn ANSIđầu ra.


1
Cảm ơn vì điều đó. Có nên có bất kỳ mối quan tâm về việc sử dụng các ký tự Unicode mặc dù? Chẳng hạn như các sự cố đã biết với các trình duyệt cũ hơn, kết xuất Markdown không chính xác, v.v.
Matt Rowles

2
Không nên có bất kỳ vấn đề nào với Markdown, nó sẽ xuất hiện trên các mẫu Jekyll và trình duyệt web của người dùng.
RobertKenny

1
Một ưu điểm khác của lựa chọn này là khác biệt nhỏ hơn so với các lựa chọn khác chỉ sử dụng các ký hiệu khác nhau vì lý do mỹ phẩm (như đầu ra từ tree).
biệt thự

1
Khi sử dụng anwser này, cây chỉ được kết xuất dưới dạng một vài dòng văn bản. Đã thử nghiệm trong VSCode và VisualStudio với plugin md. Ngoài ra trên GitHub, điều này không hoạt động
Danny

237

Tôi đã làm theo một ví dụ trong một kho lưu trữ khác và gói cấu trúc thư mục trong một cặp ba backticks ( ```):

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

5
Stack Overflow không hỗ trợ cú pháp ba lần backtick mới hơn; nó diễn giải chúng như một backticks duy nhất. Backticks đơn đánh dấu mã là văn bản nội tuyến, chỉ trong một dòng duy nhất; đó là lý do tại sao ví dụ của bạn có các sọc trắng giữa mỗi dòng. Để có cách tương thích để đánh dấu mã nhiều dòng, hãy thụt lề văn bản theo bốn khoảng trắng.
Rory O'Kane

3
Mặc dù SO không hỗ trợ backtick ba lần, nhưng hầu hết các triển khai MD khác đều làm như (như Github / BitBucket) và đây là cách duy nhất tôi có thể làm cho một cây hoạt động có nhận xét nội tuyến như từng mục. Vậy .. +1 từ đây!
Scott Byers

1
Thumbs up cho câu trả lời này. Triple backticks markdown cũng hoạt động với tôi trên Wordpress.
Binita Bharati

Hỗ trợ ba backtick dường như hoạt động trên SO bây giờ.
StriplingWar Warrior

41

Bạn có thể sử dụng cây để tạo ra một cái gì đó rất giống với ví dụ của bạn. Khi bạn có đầu ra, bạn có thể gói nó trong một <pre>thẻ để giữ định dạng văn bản thuần túy.


Thật tuyệt, điều này có vẻ hữu ích! Nhưng những gì về cấu trúc tập tin lý thuyết? Nếu đây là giải pháp duy nhất vào lúc này, tôi đoán tôi có thể phải sao chép và dán các ký tự tôi cần. Chúc mừng lần nữa.
Matt Rowles

Tôi thích giải pháp này. Nhìn gọn gàng trong Markdown
Anh Tuấn


22

Tôi đã tạo một mô-đun nút để tự động hóa nhiệm vụ này: mddir

Sử dụng

nút mddir "../relative/path/"

Để cài đặt: npm cài đặt mddir -g

Để tạo markdown cho thư mục hiện tại: mddir

Để tạo cho bất kỳ đường dẫn tuyệt đối: mddir / perfect / path

Để tạo đường dẫn tương đối: mddir ~ / Documents / anything.

Các tập tin md được tạo ra trong thư mục làm việc của bạn.

Hiện tại bỏ qua các thư mục node_modules và .git.

Xử lý sự cố

Nếu bạn nhận được lỗi 'nút \ r: Không có tệp hoặc thư mục như vậy', thì vấn đề là hệ điều hành của bạn sử dụng các kết thúc dòng khác nhau và mddir không thể phân tích chúng mà không cần bạn đặt kiểu kết thúc dòng thành Unix. Điều này thường ảnh hưởng đến Windows, nhưng cũng có một số phiên bản Linux. Việc đặt kết thúc dòng thành kiểu Unix phải được thực hiện trong thư mục bin toàn cầu mddir npm.

Sửa chữa kết thúc dòng

Nhận đường dẫn thư mục npm bin với:

npm config get prefix

Cd vào thư mục đó

pha cài đặt dos2unix

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

Điều này chuyển đổi kết thúc dòng thành Unix thay vì Dos

Sau đó chạy như bình thường với: nút mddir "../relative/path/".

Ví dụ tạo cấu trúc tệp markdown 'libraryList.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
Đáng buồn thay, tôi đã thử điều này và nó không hoạt động trên máy Windows 10 của tôi và có vẻ như dự án đã bị hủy bỏ.
Rich Hopkins

1
Xin chào, cảm ơn bạn đã thử thư viện. Tôi đã bận rộn với các dự án khác và không thể sao chép nhưng đã tìm được cách khắc phục. Nhận đường dẫn thư mục bin npm với: 'npm config get prefix'. Cd vào thư mục đó, sau đó chạy 'brew install dos2unix', chạy 'dos2unix lib / node_modules / mddir / src / mddir.js'. Điều này chuyển đổi kết thúc dòng thành Unix thay vì Dos. Sau đó chạy như bình thường với: nút mddir "../relative/path/".
John Byrne

Hoạt động trên máy Windows 10 của tôi, tiện ích nhỏ gọn - cảm ơn!
John Kattenhorn

19

Như đã đề nghị, bạn có thể sử dụng tree. Nhưng để sử dụng nó cùng với văn bản được cấu trúc lại, một số tham số bổ sung được yêu cầu.

Đầu treera tiêu chuẩn sẽ không được in nếu bạn đang sử dụng pandocđể sản xuất pdf.

tree --dirsfirst --charset=ascii /path/to/directorysẽ tạo ra một ASCIIcây đẹp có thể được tích hợp vào tài liệu của bạn như thế này:

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

Tôi đã viết kịch bản này cho danh sách tệp Dropbox của tôi.

sed được sử dụng để xóa toàn bộ đường dẫn của đường dẫn tệp / thư mục được liên kết đến sau ->

Thật không may, các tab bị mất. Sử dụng zshtôi có thể bảo quản các 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

Các đầu ra như thế này:

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

Nếu bạn đang sử dụng trình soạn thảo Atom, bạn có thể thực hiện việc này bằng gói ascii-tree .

Bạn có thể viết cây sau đây:

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

và chuyển đổi nó thành như sau bằng cách chọn nó và nhấn ctrl-alt-t:

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

5

Trong OSX, bằng cách sử dụng reveal.js, tôi gặp vấn đề kết xuất nếu tôi chỉ là người dùng treevà sau đó sao chép / dán đầu ra: các biểu tượng lạ xuất hiện.

Tôi đã tìm thấy 2 giải pháp có thể.

1) Sử dụng bộ ký tự ascii và chỉ cần sao chép / dán đầu ra trong tệp đánh dấu

tree -L 1 --charset=ascii

2) Sử dụng trực tiếp HTML và unicode trong tệp đánh dấu

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

Hy vọng nó giúp.


4

Tôi khuyên bạn nên sử dụng wasabi sau đó bạn có thể sử dụng markdown-ish cảm thấy như thế này

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

và ném cú pháp chính xác đó vào thư viện js cho việc này

ví dụ wasabi


1

Nếu bạn muốn tạo nó một cách linh hoạt, tôi khuyên bạn nên sử dụng Frontend-md . Nó rất dễ sử dụng.


1

Có một mô-đun NPM cho việc này:

npm

Nó cho phép bạn có một đại diện của cây thư mục dưới dạng chuỗi hoặc đối tượng. Sử dụng nó với dòng lệnh sẽ cho phép bạn lưu biểu diễn trong tệp txt.

Thí dụ:

$ npm dree parse myDirectory --dest ./generated --name tree
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.