Github README.md에서 디렉토리 트리를 나타내는 방법이 있습니까?


80

내 Githubs repos 문서에서 다음과 같은 디렉토리 트리 구조를 나타내고 싶습니다.

여기에 이미지 설명 입력

ascii 아트로 만드는 것 외에도 Github 맛 마크 다운으로 할 수있는 방법이 있습니까?

그래서 기본적 으로이 질문 과 같지만 github 특정 솔루션이 있는지 궁금합니다.


2
Atom 편집기를 사용하는 경우이 패키지를 사용하여 ASCII 트리를 쉽게 작성할 수 있습니다. ascii-tree
Ramtin Soltani

동일한 목적으로 프로젝트를 생성했습니다. python3 스크립트입니다. github.com/prncvrm/Project-Structure 방문하여 시도하고 문제를 제기하거나 포크하십시오.
프린스

답변:


30

직접적으로는 아닙니다. 당신은 그것을 손으로 만들어서 직접 넣어야 할 것입니다. * nix 상자를 로컬에서 사용하고 utf를 사용하고 있다고 가정하면 tree 가 멋지게 생성 할 것입니다 (위에서 사용한 예제를 생성 한 것이라고 생각합니다).

readme.md문서 대상 으로을 의미한다고 가정하면 자동화 할 수있는 유일한 방법은 실행 tree하여 readme 파일에 포함 시키는 git pre-commit 후크 일 것입니다 . 출력이 변경된 경우에만 readme를 업데이트했는지 확인하기 위해 diff를 수행하고 싶습니다.

Otoh 만약 당신이 github 페이지를 통해 별도의 문서를 유지한다면, 당신이 할 수있는 일은 로컬에서 jekyll (또는 다른 생성기)을 사용하고 정적 페이지를 직접 푸시하는 것으로 전환하는 것입니다. 그런 다음 플러그인 / 셸 스크립트 * / 수동 변경 (별로 다르지 않을 경우)으로 원하는 변경 사항을 구현하거나 위와 동일한 방법을 사용할 수 있습니다.

* 커밋 후크에 통합하면 페이지 변경에 추가 단계를 추가하지 않아도됩니다.


1
대답 해 주셔서 감사합니다.하지만 그게 제가 의미하는 바가 아닙니다. readme에 디렉토리 트리 를 표시 하는 방법 (중첩 등)이 생성되지 않는지 물어 보려고 했습니다. 명확성을 위해 질문을 편집했습니다.

index.html이없는 경우 아파치에서 얻을 수있는 정렬과 같은 링크가있는 경우처럼?
Oliver Matthews

아니요, 내 말은 다음과 같이 쉽게 생성 할 수있는 방법이 있다면 readme에 imgur.com/OHfWdLk 입니다.

3
Mac에서는 설치 수 tree와 명령을 브루brew install tree. 그런 다음 표시하고 싶은 디렉토리에서 실행 tree . >> tree.txt한 다음 README.md 파일의 텍스트를 복사하고 편집했습니다. 내가 필요한 것을 정확히했습니다!
morphatic

1
왜이 답변이 받아 들여 집니까? 이를 수행하는 데 사용할 수있는 좋은 유틸리티가 많이 있습니다. 이 설명서를 사용하지 마십시오. 이것을 확인하십시오. github.com/michalbe/md-file-tree
nagendra547

121

나는 이런 식으로 문제를 해결했습니다.

  1. treebash에 명령 을 삽입하십시오 .

여기에 이미지 설명 입력

  1. github 저장소에 README.md를 만들고 bash 결과를 복사합니다.
  2. 마크 다운 코드 내에 .md 파일에 삽입

여기에 이미지 설명 입력 4. 출력을보고 행복하세요 =) 여기에 이미지 설명 입력


1
여기에 복사 할 수있는 예, 난에 발견 github에
피에트로 Nadalini에게

1
경우에 따라 "```bash ...```"를 사용하면 일부 단어가 강조 표시됩니다. 대신 "pre"태그 : "<pre> ... </ pre>"를 사용할 수 있습니다.
Liran Funaro

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에 표시되지 않습니다 ...)

프로젝트 트리
  • 트리 MD
  • dir2
    • file21.ext
    • file22.ext
    • file23.ext
  • dir1
    • file11.ext
    • file12.ext
  • file_in_root.ext
  • README.md
  • dir3

정말 좋은 생각입니다! 내 분을 git에 보관하면 이제 README TOC를 쉽게 업데이트 할 수 있습니다. 감사합니다! 더 구성 가능하게 만들고 싶습니까?
berezovskyi


나무 깊이를 제한하는 방법이 있습니까?
Sami-L

1
이것은 Mac에서 작동하지 않았습니다. !! brew install tree를 사용하여 트리를 설치했습니다.
nagendra547

야 ...이 사랑스러운
칼 Boneri

15

이 작업을 자동화하기 위해 노드 모듈을 만들었습니다. mddir

용법

노드 mddir "../relative/path/"

설치하려면 : npm install mddir -g

현재 디렉토리에 대한 마크 다운을 생성하려면 : mddir

절대 경로를 생성하려면 : mddir / absolute / path

상대 경로를 생성하려면 : mddir ~ / Documents / whatever.

md 파일은 작업 디렉토리에 생성됩니다.

현재 node_modules 및 .git 폴더를 무시합니다.

문제 해결

'node \ r : No such file or directory'오류가 표시되면 운영 체제가 다른 줄 끝을 사용하고 mddir이 명시 적으로 줄 끝 스타일을 Unix로 설정하지 않으면이를 구문 분석 할 수 없다는 문제입니다. 이것은 일반적으로 Windows뿐만 아니라 일부 Linux 버전에도 영향을 미칩니다. 줄 끝을 Unix 스타일로 설정하는 작업은 mddir npm 전역 bin 폴더 내에서 수행해야합니다.

줄 끝 수정

다음을 사용하여 npm bin 폴더 경로를 가져옵니다.

npm config get prefix

해당 폴더에 CD

양조 설치 dos2unix

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

이것은 줄 끝을 Dos 대신 Unix로 변환합니다.

그런 다음 node mddir "../relative/path/"를 사용하여 정상적으로 실행합니다.

생성 된 마크 다운 파일 구조 '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) JSON 대신 텍스트로 출력을 얻는 옵션이 있습니다. 마크 다운에 붙여 넣기 전에 JSON 출력을 추가로 구문 분석해야했습니다. 2) node_modules/mddir/src/디렉토리 에서 실행할 필요가 없도록 만드는 방법이 있습니까? 예를 들어 node ~./src > dir-struct.txt내 프로젝트 디렉토리에서 실행 하고 dir-struct.txt의 내용을 내 마크 다운에 직접 붙여넣고 싶습니다.
wilblack



3

트리 확장 패키지를 확인할 수도 있습니다 . 노드> = 6.x를 사용하여 명령 줄 앱으로 사용할 수 있습니다.

그것은 매우 유사 tree하지만 트리에서 최대 깊이를 구성하는 옵션이 있습니다. 그것은 끔찍한 것 중 하나입니다. 또한 .gitignore파일 을 사용하여 필터링 할 수 있습니다 .

여기에 이미지 설명 입력


1
다른 사람에게 참고 : 이와 같은 것을 마크 다운으로 변환하려면 세 개의 백틱을 포함하십시오.
user45254

3

위의 솔루션 중 어느 것도 Mac에서 완전히 작동하지 않았습니다.

내가 찾은 가장 좋은 해결책은 여기에서 만든 유틸리티를 사용하는 것입니다.

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

분명히 tree는 더 나은 출력을 가지고 있지만 내 .gitignore 파일을 사용하고 싶습니다. 내 컴파일 된 콘텐츠가 표시되지 않도록


1

간단한 tree명령이 작업을 수행합니다. 예를 들어 : tree -o readme.md현재 작업 디렉토리의 트리 구조를 인쇄하고 readme.md. 그런 다음 Sublime과 같은 텍스트 편집기 중 하나에서 readme.md 파일을 열고 한 쌍의 삼중 백틱 (```) 안에 내용을 래핑합니다.

참고 : OSX가 아직 설치되지 않은 경우 설치 트리를 추출해야 할 수 있습니다. Linux 및 Windows에서는 정상적으로 작동합니다. 또한 창에서 하이픈을 슬래시로 바꿔야 할 수도 있습니다.

이게 도움이 되길 바란다.


1

Windows에서 작업하는 경우 tree /f명령 프롬프트에서 원하는 디렉토리 내부에 작성 하십시오. 이것은 당신의 일을해야합니다. 내 트리플 백틱을 둘러싼 마크 다운에 출력을 복사하여 붙여 넣을 수 있습니다. 즉 '' '{tree structure here}' ''


0

UTF-8로 생성하고 모든 파일과 폴더에 연결하여 정말 쉽게 탐색하고 싶습니다. 여기 에서 예를 보십시오 .

거부 된 마크 다운 파일


대신 투표하면됩니다. 필요한 추가 정보가 무엇인지 알려주십시오. 원하는대로 마크 다운을 생성 할 수 있습니다. 내 개인 라이브러리를 사용하지만 내 선호도는 귀하와 다를 수 있습니다.
Деян Добромиров

0

빠른 솔루션을 원하는 사람들을 위해 :

터미널에 다음 명령을 입력하여 트리의 출력과 유사한 출력을 콘솔로 가져 오는 방법이 있습니다.

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

이 대안은이 문서에서 언급됩니다 : https://wiki.ubuntuusers.de/tree/

그런 다음 Jonathas BC의 답변에서 언급했듯이 출력을 복사하고 코드 블록 백틱을 사용하여 .md 파일 내에 캡슐화 할 수 있습니다.

그러나 노드 프로젝트의 모든 노드 모듈 폴더도 출력한다는 점에 유의하십시오. 그리고 나무에서 다음과 같이 할 수 있습니다.

tree -I node_modules

노드 모듈 폴더를 제외합니다.


0

bash에 명령 트리를 삽입하십시오.

또한 DOS 명령 "트리"가 있습니다. 다음 명령을 사용하여 각 하위 디렉토리의 디렉토리 경로와 파일을 표시 할 수 있습니다.

tree /F

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.