क्या कोई तरीका है कि एक Github README.md में निर्देशिका ट्री का प्रतिनिधित्व किया जाए?


80

मेरे गित्ब्स रिपोस डॉक्यूमेंटेशन में मैं इस तरह एक डायरेक्टरी ट्री स्ट्रक्चर का प्रतिनिधित्व करना चाहता हूं:

यहाँ छवि विवरण दर्ज करें

क्या ऐसा करने का एक तरीका है, जिसमें गितुब के स्वाद के निशान के साथ, सिर्फ आस्की कला के साथ इसे बनाने के अलावा?

तो मूल रूप से यह सवाल पसंद है , लेकिन मैं सोच रहा हूं कि क्या कोई विशिष्ट समाधान है।


2
यदि आप एटम संपादक का उपयोग कर रहे हैं, तो आप इस पैकेज का उपयोग आसानी से ASCII पेड़ लिखने के लिए कर सकते हैं: अस्सी-ट्री
— रामतिन सोल्टानी

बस इसी उद्देश्य के लिए एक प्रोजेक्ट बनाया। इसकी एक पायथन 3 स्क्रिप्ट है। github.com/prncvrm/Project-Structure विज़िट, एक कोशिश दें और मुद्दे या कांटा बनाएं।
— राजकुमार

जवाबों:


30

सीधे नहीं, नहीं। आपको इसे बनाना होगा और इसे अपने अंदर रखना होगा। मान लें कि आप स्थानीय रूप से एक * nix बॉक्स का उपयोग कर रहे हैं और utf का उपयोग कर रहे हैं, तो पेड़ इसे अच्छी तरह से उत्पन्न करेगा (मेरा मानना ​​है कि आपके द्वारा ऊपर उपयोग किया गया उदाहरण उत्पन्न होता है)।

यदि आपको readme.mdलगता है कि दस्तावेज़ीकरण लक्ष्य के रूप में इसका मतलब है , तो मुझे लगता है कि आप इसे स्वचालित कर सकते हैं एक ही रास्ता एक पूर्व-पूर्व हुक होगा जो भाग गया treeऔर इसे आपके रीडमी फ़ाइल में एम्बेड कर दिया। आप यह सुनिश्चित करने के लिए कि क्या आपने केवल आउटपुट को बदल दिया है, तो रीडमी को अद्यतन करने के लिए एक अलग करना चाहते हैं।

ओटोह यदि आप गितुब पृष्ठों के माध्यम से अलग डॉक्स बना रहे हैं, तो आप क्या कर सकते हैं, स्थानीय रूप से जेकिल (या अन्य जनरेटर) का उपयोग करने और स्वयं स्थैतिक पृष्ठों को धकेलने के लिए स्विच है। तब आप संभावित रूप से उन बदलावों को लागू कर सकते हैं जिन्हें आप प्लगइन / शेल स्क्रिप्ट * / मैनुअल परिवर्तनों के रूप में चाहते हैं (यदि वे बहुत भिन्न नहीं होंगे), या उपरोक्त विधि का उपयोग करें।

* यदि आप इसे एक प्रतिबद्ध हुक में एकीकृत करते हैं, तो आप अपने पृष्ठों को बदलने के लिए कोई अतिरिक्त कदम जोड़ने से बच सकते हैं।


1
उत्तर के लिए धन्यवाद, लेकिन यह वही नहीं है जो मेरा मतलब था। मेरे कहने का मतलब है कि क्या आपके रीडमी (नेस्टिंग आदि के साथ) में डायरेक्टरी ट्री का प्रतिनिधित्व करने का कोई तरीका है, इसे उत्पन्न नहीं किया है। मैंने स्पष्टता के लिए प्रश्न संपादित किया है।

यदि आपके पास index.html नहीं है, तो आप अपाचे में मिलने वाले लिंक जैसे लिंक में से एक के रूप में?
— ओलिवर मैथ्यूज

नहीं, मेरा क्या मतलब है अगर कुछ इस तरह से उत्पन्न करने का एक आसान तरीका है: imgur.com/OHfWdLk आपके रीडमी में।

3
एक मैक पर, आप Homebrew , यानी के treeसाथ कमांड स्थापित कर सकते हैं । फिर निर्देशिका से मैं प्रतिनिधित्व करना चाहता था और फिर मैंने अपनी README.md फ़ाइल में पाठ को कॉपी और संपादित किया। ठीक वैसा ही किया जो मुझे चाहिए था! brew install treetree . >> tree.txt
— मोर्थैटिक

1
यह उत्तर क्यों स्वीकार किया जाता है? ऐसा करने के लिए कई अच्छी उपयोगिताएँ उपलब्ध हैं। कृपया यह मैनुअल न करें। इसकी जांच करो। github.com/michalbe/md-file-tree
— nagendra547

121

मुझे इस तरह से समस्या का समाधान मिला:

  1. कमांड treeको बैश में डालें ।

उदाहरण

यहाँ छवि विवरण दर्ज करें

  1. Github रिपॉजिटरी और कॉपी बैश परिणाम में एक README.md बनाएं
  2. मार्कडाउन कोड के भीतर .md फाइल डालें

उदाहरण

यहाँ छवि विवरण दर्ज करें 4. आउटपुट देखें और खुश रहें) यहाँ छवि विवरण दर्ज करें


1
यहाँ एक उदाहरण आप कॉपी कर सकते हैं, मैं यह पाया GitHub
— पिएत्रो Nadalini

1
ध्यान दें कि कुछ मामलों में, "` `बाश ...` `` का उपयोग करके कुछ शब्दों को उजागर किया जाएगा। इसके बजाय, आप "पूर्व" टैग का उपयोग कर सकते हैं: "<पूर्व> ... </ पूर्व>"।
— लीरन फनरो

39

मैंने एक छोटी सी स्क्रिप्ट लिखी है जो इस चाल को करती है:

#!/bin/bash

#File: tree-md

tree=$(tree -tf --noreport -I '*~' --charset ascii $1 |
       sed -e 's/| \+/  /g' -e 's/[|`]-\+/ */g' -e 's:\(* \)\(\(.*/\)\([^/]\+\)\):\1[\4](\2):g')

printf "# Project tree\n\n${tree}"

उदाहरण:

मूल ट्री कमांड:

$ tree
.
├── dir1
│   ├── file11.ext
│   └── file12.ext
├── dir2
│   ├── file21.ext
│   ├── file22.ext
│   └── file23.ext
├── dir3
├── file_in_root.ext
└── README.md

3 directories, 7 files

मार्कडाउन ट्री कमांड:

$ ./tree-md .
# Project tree

.
 * [tree-md](./tree-md)
 * [dir2](./dir2)
   * [file21.ext](./dir2/file21.ext)
   * [file22.ext](./dir2/file22.ext)
   * [file23.ext](./dir2/file23.ext)
 * [dir1](./dir1)
   * [file11.ext](./dir1/file11.ext)
   * [file12.ext](./dir1/file12.ext)
 * [file_in_root.ext](./file_in_root.ext)
 * [README.md](./README.md)
 * [dir3](./dir3)

रेंडर किया गया परिणाम:

(लिंक Stackoverflow में दिखाई नहीं दे रहे हैं ...)

प्रोजेक्ट ट्री
  • पेड़ का पेड़
  • dir2
    • file21.ext
    • file22.ext
    • file23.ext
  • dir1
    • file11.ext
    • file12.ext
  • file_in_root.ext
  • README.md
  • dir3

इतना बढ़िया आइडिया! अपने मिनटों को ध्यान में रखते हुए और अब मैं README TOC को आसानी से अपडेट कर सकता हूं। धन्यवाद! क्या आपने इसे और अधिक विन्यास बनाने के लिए सोचा था?
— बेरेज़ोव्स्की

1
इसके अलावा, @michalbe github.com/michalbe/md-file-tree
— mikequentel

क्या पेड़ की गहराई को सीमित करने का कोई तरीका है?
— सामी-एल

1
यह मैक के लिए काम नहीं किया !! मैंने पेड़ लगाने के लिए काढ़ा का उपयोग किया।
— नागेन्द्र ५४47

यार ... यह प्यारा है
— कार्ल बोनेरी

15

मैंने इस कार्य को स्वचालित करने के लिए एक नोड मॉड्यूल बनाया: mddir

प्रयोग

नोड मदिर "../relative/path/"

स्थापित करने के लिए: npm स्थापित mddir -g

वर्तमान निर्देशिका के लिए मार्कडाउन उत्पन्न करने के लिए: mddir

किसी भी निरपेक्ष पथ के लिए उत्पन्न करने के लिए: mddir / निरपेक्ष / पथ

एक रिश्तेदार पथ के लिए उत्पन्न करने के लिए: mddir ~ / दस्तावेज / जो भी हो।

Md फाइल आपके वर्किंग डायरेक्टरी में जेनरेट होती है।

वर्तमान में नोड_मॉडल, और .गित फ़ोल्डर को अनदेखा करता है।

समस्या निवारण

यदि आपको 'नोड \ r: ऐसी कोई फ़ाइल या निर्देशिका' प्राप्त नहीं होती है, तो समस्या यह है कि आपका ऑपरेटिंग सिस्टम अलग-अलग लाइन एंडिंग का उपयोग करता है और mddir आपको बिना यूनिक्स के लाइन एंडिंग स्टाइल को स्पष्ट रूप से सेट किए बिना पार्स नहीं कर सकता है। यह आमतौर पर विंडोज को प्रभावित करता है, लेकिन लिनक्स के कुछ संस्करण भी। यूनिक्स शैली के लिए लाइन एंडिंग की स्थापना mddir npm वैश्विक बिन फ़ोल्डर में की जानी चाहिए।

लाइन अंत तय

साथ npm बिन फ़ोल्डर पथ प्राप्त करें:

npm config get prefix

उस फ़ोल्डर में सीडी

काढ़ा स्थापित dos2unix

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

यह डॉस के बजाय यूनिक्स के लिए लाइन एंडिंग को परिवर्तित करता है

फिर साथ में चलाएं: नोड mddir "../relative/path/"।

उदाहरण जनरेट किया गया मार्कडाउन फाइल स्ट्रक्चर 'डाइरेक्टरीलीस्टेडएमडी'

    |-- .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) JSON के बजाय केवल टेक्स्ट के रूप में आउटपुट प्राप्त करने का विकल्प है। इससे पहले कि मैं इसे मार्कडाउन में पेस्ट कर सकूं, मुझे JSON आउटपुट को पार्स करना पड़ा। 2) क्या इसे बनाने का कोई तरीका है ताकि आपको इसे node_modules/mddir/src/निर्देशिका से चलाना न पड़े ? उदाहरण के लिए, मैं node ~./src > dir-struct.txtअपनी परियोजना निर्देशिका से भागना चाहता हूँ और dir-struct.txt की सामग्री को सीधे अपने मार्कशीट में पेस्ट करना चाहता हूँ।
— विलेब्लैक

11

ऐसा करने का सबसे अच्छा तरीका है कि आप अपने पेड़ को एक कोड ब्लॉक निरूपित करने के लिए ट्रिपल बैकटिक्स में घेरें। अधिक जानकारी के लिए, मार्कडाउन डॉक्स देखें: http://daringfireball.net/projects/markdown/syntax#code


ओपी ने जो पूछा, उससे अलग लेकिन ठीक वही टिप जिसकी मुझे जरूरत थी। धन्यवाद!
— माइक एलिस


3

आप इस ट्री-विस्तारित पैकेज को भी देख सकते हैं । इसे नोड> = 6.x का उपयोग करके कमांड लाइन ऐप के रूप में इस्तेमाल किया जा सकता है।

यह बहुत समान है, treeलेकिन पेड़ में अधिकतम गहरी को कॉन्फ़िगर करने का विकल्प भी है, यह इसके भयानक चीजों में से एक है। इसके अलावा, आप .gitignoreफ़ाइल का उपयोग करके फ़िल्टर कर सकते हैं ।

यहाँ छवि विवरण दर्ज करें


1
दूसरों पर ध्यान दें: इस तरह के कुछ को मार्कडाउन में बदलने के लिए, बस तीन बैकटिक्स शामिल करें।
— user45254

3

उपरोक्त किसी भी समाधान ने मेरे लिए पूरी तरह से मेरे मैक पर काम नहीं किया।

सबसे अच्छा समाधान मुझे यह मिला कि यहां बनाई गई उपयोगिता का उपयोग करना है।

https://github.com/michalbe/md-file-tree

एक बार जब आप उपयोगिता स्थापित कर लेते हैं, npm install md-file-tree -gतो आप बस सभी फ़ाइलों को प्राप्त करने के लिए चला सकते हैं

md-file-tree . > README.md

3

यहाँ एक उपयोगी है git aliasजो मेरे लिए काम करता है।

git config --global alias.tree '! git ls-tree --full-name --name-only -t -r HEAD | sed -e "s/[^-][^\/]*\//   |/g" -e "s/|\([^ ]\)/|-- \1/"'

यहाँ का उत्पादन है git tree

jonavon@XPS13:~/projects/roman-numerals$ git tree
.gitignore
pom.xml
src
   |-- main
   |   |-- java
   |   |   |-- com
   |   |   |   |-- foxguardsolutions
   |   |   |   |   |-- jonavon
   |   |   |   |   |   |-- AbstractFile.java
   |   |   |   |   |   |-- roman
   |   |   |   |   |   |   |-- Main.java
   |   |   |   |   |   |   |-- Numeral.java
   |   |   |   |   |   |   |-- RomanNumberInputFile.java
   |   |   |   |   |   |   |-- RomanNumeralToDecimalEvaluator.java
   |-- test
   |   |-- java
   |   |   |-- com
   |   |   |   |-- foxguardsolutions
   |   |   |   |   |-- jonavon
   |   |   |   |   |   |-- roman
   |   |   |   |   |   |   |-- InterpretSteps.java
   |   |   |   |   |   |   |-- RunCukesTest.java
   |   |-- resources
   |   |   |-- com
   |   |   |   |-- foxguardsolutions
   |   |   |   |   |-- jonavon
   |   |   |   |   |   |-- roman
   |   |   |   |   |   |   |-- Interpret.feature
   |   |   |-- sample-input.txt

तुलनीय treeआज्ञा

jonavon@XPS13:~/projects/roman-numerals$ tree -n
.
├── pom.xml
├── src
│   ├── main
│   │   └── java
│   │       └── com
│   │           └── foxguardsolutions
│   │               └── jonavon
│   │                   ├── AbstractFile.java
│   │                   └── roman
│   │                       ├── Main.java
│   │                       ├── Numeral.java
│   │                       ├── RomanNumberInputFile.java
│   │                       └── RomanNumeralToDecimalEvaluator.java
│   └── test
│       ├── java
│       │   └── com
│       │       └── foxguardsolutions
│       │           └── jonavon
│       │               └── roman
│       │                   ├── InterpretSteps.java
│       │                   └── RunCukesTest.java
│       └── resources
│           ├── com
│           │   └── foxguardsolutions
│           │       └── jonavon
│           │           └── roman
│           │               └── Interpret.feature
│           └── sample-input.txt
└── target
    ├── classes
    │   └── com
    │       └── foxguardsolutions
    │           └── jonavon
    │               ├── AbstractFile.class
    │               └── roman
    │                   ├── Main.class
    │                   ├── Numeral.class
    │                   ├── RomanNumberInputFile.class
    │                   └── RomanNumeralToDecimalEvaluator.class
    ├── generated-sources
    │   └── annotations
    └── maven-status
        └── maven-compiler-plugin
            └── compile
                └── default-compile
                    ├── createdFiles.lst
                    └── inputFiles.lst

30 directories, 17 files

स्पष्ट रूप से वृक्ष का बेहतर उत्पादन होता है, लेकिन मैं चाहूंगा कि यह मेरी .gitignore फ़ाइल का उपयोग करे। ताकि मेरी संकलित सामग्री दिखाई न दे


1

साधारण treeकमांड काम करेगा। उदाहरण के लिए: tree -o readme.mdआपकी वर्तमान कार्यशील निर्देशिका की ट्री संरचना को मुद्रित करेगा और उसे लिखेगाreadme.md । फिर सब्लेमाइम जैसे टेक्स्ट एडिटर में से एक में readme.md फ़ाइल खोलें और ट्रिपल बैकटिक्स (`` `) की एक जोड़ी के भीतर इसकी सामग्री को लपेटें।

FYI करें: यदि आपको पहले से इंस्टॉल नहीं किया गया है तो आपको OSX में ट्री इंस्टॉल करना पड़ सकता है। लिनक्स और विंडोज में इसे ठीक काम करना चाहिए। खिड़कियों में भी आपको आगे स्लैश के साथ हाइफ़न को बदलना पड़ सकता है।

आशा है कि ये आपकी मदद करेगा।


1

यदि आप tree /fउन निर्देशिकाओं के अंदर विंडोज़ पर काम कर रहे हैं, जिन्हें आप कमांड प्रॉम्प्ट में हासिल करना चाहते हैं। यह आपका काम करना चाहिए। आप मार्कडाउन पर टिके हुए आउटपुट को कॉपी और पेस्ट कर सकते हैं, जो मेरे ट्रिपल बैक टिक्स को घेरता है यानी '' {ट्री स्ट्रक्चर यहाँ} '' ''


0

मैं इसे यूटीएफ -8 के साथ उत्पन्न करना पसंद करता हूं और इसे वास्तव में आसानी से नेविगेट करने के लिए हर फाइल और फ़ोल्डर से लिंक करता हूं। कृपया यहां एक उदाहरण देखें ।

Denerated markdown फ़ाइल


इसके बजाए अगर उसे वोट दिया जाए। मुझे बताओ कि आपको कौन सी अतिरिक्त जानकारी चाहिए। आप जैसा चाहें वैसा मार्कडाउन जनरेट कर सकते हैं। मैं इसे अपनी निजी लाइब्रेरी के साथ करता हूं, लेकिन मेरी प्राथमिकता आपसे अलग हो सकती है।
— Деян Добромиров

0

उन लोगों के लिए जो एक त्वरित समाधान चाहते हैं:

अपने टर्मिनल में निम्न कमांड टाइप करके, ट्री से आउटपुट के समान कंसोल पर आउटपुट प्राप्त करने का एक तरीका है:

ls -R YOURFOLDER | grep ':$' | sed -e 's/:$//' -e 's/[^\/]*\//|  /g' -e 's/|  \([^|]\)/|–– \1/g' 

इस दस्तावेज में इस विकल्प का उल्लेख किया गया है: https://wiki.ubuntuusers.de/tree/

फिर आउटपुट को कॉपी किया जा सकता है और कोड ब्लॉक बैक टिक्स के साथ एक .md फ़ाइल के अंदर एन्कैप्ड किया जा सकता है, जैसे कि जोनाथस बीसी के उत्तर में उल्लेखित है।

लेकिन ध्यान रखें कि यह नोड प्रोजेक्ट में सभी नोड मॉड्यूल फ़ोल्डर को आउटपुट करता है। और पेड़ में आप कुछ ऐसा कर सकते हैं

tree -I node_modules

नोड मॉड्यूल फ़ोल्डर को बाहर करने के लिए।


0

बाश में कमांड ट्री डालें।

इसके अलावा, एक डॉस कोमानंद "पेड़" है। आप कमांड के साथ प्रत्येक उपनिर्देशिका में निर्देशिका पथ और फाइलें प्रदर्शित कर सकते हैं:

tree /F

https://web.csulb.edu/~mddock/tree.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.