Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Using either Markdown or Programmatically to generate trees🌳 and directories📁, and to verify directories🔍. Provide CLI, Go package and Web.

License

NotificationsYou must be signed in to change notification settings

ddddddO/gtree

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1
GitHub Pages
DeepWiki
GitHub releaseGo Reference
LicenseMentioned in Awesome Go
codecovGo Report Cardci


Using either Markdown or Programmatically to generate directory trees🌳 and directories🗂, and to verify directories🔍.Provide CLI, Golang library and Web.

Table of Contents

Acknowledgments

Thanks for providing very useful CLI for cloud storage tree output🤩🎉

Everyone is encouraged to use them!

CLI forAmazon S3 tree output.
aws s3 command does not do whattree command does, butstree command can display tree!

CLI forGoogle Cloud Storage tree output.
gcloud storage command does not do whattree command does, butgcstree command can display tree!

gtree packeage has been utilized for other tools as well🚀

I hope you will use these tools as well!

Web

https://ddddddo.github.io/gtree/

This page is that converts from Markdown to tree!
This page calls a function that outputs tree. This function is a Go package compiled as WebAssembly.
The symbols that can be used in Markdown are*,-,+, and#.
Indentation represents hierarchy. The indentation can be whatever you specify, but use the same pattern.
You can change the branches like in the image below.
Also, once loaded, you can enjoy offline!

You can open it in your browser with

$gtree web

source code

CLI

Installation

Go$ go install github.com/ddddddO/gtree/cmd/gtree@latestaqua$ aqua g -i ddddddO/gtreeHomebrew$ brew install gtreeNix$ nix-env -i gtreeor$ nix-shell -p gtreeMacPorts$ port install gtreeAUR$ wip...Scoop$ scoop bucket add ddddddO https://github.com/ddddddO/scoop-bucket.git$ scoop install ddddddO/gtreedeb$ export GTREE_VERSION=X.X.X$ curl -o gtree.deb -L https://github.com/ddddddO/gtree/releases/download/v$GTREE_VERSION/gtree_$GTREE_VERSION-1_amd64.deb$ dpkg -i gtree.debrpm$ export GTREE_VERSION=X.X.X$ yum install https://github.com/ddddddO/gtree/releases/download/v$GTREE_VERSION/gtree_$GTREE_VERSION-1_amd64.rpmapk$ export GTREE_VERSION=X.X.X$ curl -o gtree.apk -L https://github.com/ddddddO/gtree/releases/download/v$GTREE_VERSION/gtree_$GTREE_VERSION-1_amd64.apk$ apk add --allow-untrusted gtree.apkDocker$ docker pull ghcr.io/ddddddo/gtree:latest$ docker run ghcr.io/ddddddo/gtree:latest template | docker run -i ghcr.io/ddddddo/gtree:latest outputgtree├── cmd│   └── gtree│       └── main.go├── testdata│   ├── sample1.md│   └── sample2.md├── Makefile└── tree.go

etc

download binary fromhere.

Usage

$gtree --helpNAME:   gtree - This CLI uses Markdown to generate directory trees and directories itself, and also verifies directories.           The symbols that can be used in Markdown are '-', '+', '*', and '#'.           Within Markdown, indentation represents hierarchy. The indentation can be whatever you specify, but use the same pattern.USAGE:   gtree [global options] command [command options] [arguments...]VERSION:   1.10.2 / revision 85520a1COMMANDS:   output, o, out     Outputs tree from markdown.                      Let's try 'gtree template | gtree output'.   mkdir, m           Makes directories and files from markdown. It is possible to dry run.                      Let's try 'gtree template | gtree mkdir -e .go -e .md -e Makefile'.   verify, vf         Verifies tree structure represented in markdown by comparing it with existing directories.                      Let's try 'gtree template | gtree verify'.   template, t, tmpl  Outputs markdown template. Use it to try out gtree CLI.   web, w, www        Opens "Tree Maker" in your browser and shows the URL in terminal.   version, v         Prints the version.   help, h            Shows a list of commands or help for one commandGLOBAL OPTIONS:   --help, -h     show help   --version, -v  print the version

Output subcommand

$gtree output --helpNAME:   gtree output - Outputs tree from markdown.                  Let's try 'gtree template | gtree output'.USAGE:   gtree output [command options] [arguments...]OPTIONS:   --file value, -f value               specify the path to markdown file. (default: stdin)   --massive, -m                        set this option when there are very many blocks of markdown. (default: false)   --massive-timeout value, --mt value  set this option if you want to set a timeout. (default: 0s)   --format value                       set this option when specifying output format. "json", "yaml", "toml"   --watch, -w                          follow changes in markdown file. (default: false)   --help, -h                           show help

Try it!

$gtree template- gtree        - cmd                - gtree                        - main.go        - testdata                - sample1.md                - sample2.md        - Makefile        - tree.go$gtree template| gtree outputgtree├── cmd│   └── gtree│       └── main.go├── testdata│   ├── sample1.md│   └── sample2.md├── Makefile└── tree.go

Other pattern.

├── gtree output -f testdata/sample1.md├── cat testdata/sample1.md | gtree output -f -└── cat testdata/sample1.md | gtree output

Usage other than representing a directory.

$cat testdata/sample2.md| gtree outputk8s_resources├── (Tier3)│   └── (Tier2)│       └── (Tier1)│           └── (Tier0)├── Deployment│   └── ReplicaSet│       └── Pod│           └── container(s)├── CronJob│   └── Job│       └── Pod│           └── container(s)└── (empty)    ├── DaemonSet    │   └── Pod    │       └── container(s)    └── StatefulSet        └── Pod            └── container(s)

Multiple roots

$cat testdata/sample6.md| gtree outputArtiodactyla├── Artiofabula│   ├── Cetruminantia│   │   ├── Whippomorpha│   │   │   ├── Hippopotamidae│   │   │   └── Cetacea│   │   └── Ruminantia│   └── Suina└── TylopodaCarnivora├── Feliformia└── Caniformia    ├── Canidae    └── Arctoidea        ├── Ursidae        └── x            ├── Pinnipedia            └── Musteloidea                ├── Ailuridae                └── x                    ├── Mephitidae                    └── x                        ├── Procyonidae                        └── Mustelidae

Output JSON

see
$cat testdata/sample5.md| gtree output --format json| jq{  "value": "a",  "children": [    {      "value": "i",      "children": [        {          "value": "u",          "children": [            {              "value": "k",              "children": null            },            {              "value": "kk",              "children": null            }          ]        },        {          "value": "t",          "children": null        }      ]    },    {      "value": "e",      "children": [        {          "value": "o",          "children": null        }      ]    },    {      "value": "g",      "children": null    }  ]}

Output YAML

see
$cat testdata/sample5.md| gtree output --format yamlvalue: achildren:- value: i  children:  - value: u    children:    - value: k      children: []    - value: kk      children: []  - value: t    children: []- value: e  children:  - value: o    children: []- value: g  children: []

Output TOML

see
$cat testdata/sample5.md| gtree output --format tomlvalue = 'a'[[children]]value = 'i'[[children.children]]value = 'u'[[children.children.children]]value = 'k'children = [][[children.children.children]]value = 'kk'children = [][[children.children]]value = 't'children = [][[children]]value = 'e'[[children.children]]value = 'o'children = [][[children]]value = 'g'children = []

Mkdir subcommand

$gtree mkdir --helpNAME:   gtree mkdir - Makes directories and files from markdown. It is possible to dry run.                 Let's try 'gtree template | gtree mkdir -e .go -e .md -e Makefile'.USAGE:   gtree mkdir [command options] [arguments...]OPTIONS:   --file value, -f value                                       specify the path to markdown file. (default: stdin)   --dry-run, -d                                                dry run. detects node that is invalid for directory generation. the order of the output and made directories does not always match. (default: false)   --extension value, -e value [ --extension value, -e value ]  set this option if you want to create file instead of directory. for example, if you want to generate files with ".go" extension: "-e .go"   --target-dir value                                           set this option if you want to specify the directory you want to make directory. (default: current directory)   --help, -h                                                   show help

Try it!

$gtree template- gtree        - cmd                - gtree                        - main.go        - testdata                - sample1.md                - sample2.md        - Makefile        - tree.go$gtree template| gtree mkdir$tree gtree/gtree/├── cmd│   └── gtree│       └── main.go├── Makefile├── testdata│   ├── sample1.md│   └── sample2.md└── tree.go8 directories, 0 files

make directories and files

$gtree template- gtree        - cmd                - gtree                        - main.go        - testdata                - sample1.md                - sample2.md        - Makefile        - tree.go$gtree template| gtree mkdir -e .go -e .md -e Makefile$tree gtree/gtree/├── cmd│   └── gtree│       └── main.go├── Makefile├── testdata│   ├── sample1.md│   └── sample2.md└── tree.go3 directories, 5 files

dry run

Does not create a file and directory.

$gtree template| gtree mkdir --dry-run -e .go -e .md -e Makefilegtree├── cmd│   └── gtree│       └── main.go├── testdata│   ├── sample1.md│   └── sample2.md├── Makefile└── tree.go4 directories, 5 files

Any invalid file or directory name will result in an error.

$gtree mkdir --dry-run<<EOS- root  - aa  - bb    - b/bEOSinvalid node name: b/b
$gtree mkdir --dry-run<<EOS- /root  - aa  - bb    - bbEOSinvalid node name: /root

Verify subcommand

$gtree verify --helpNAME:   gtree verify - Verifies tree structure represented in markdown by comparing it with existing directories.                  Let's try 'gtree template | gtree verify'.USAGE:   gtree verify [command options] [arguments...]OPTIONS:   --file value, -f value  specify the path to markdown file. (default: stdin)   --target-dir value      set this option if you want to specify the directory you want to verify. (default: current directory)   --strict                set this option if you want strict directory match validation. (default: non strict)   --help, -h              show help

Try it!

$tree exampleexample├── README.md├── find_pipe_programmable-gtree│   ├── README.md│   ├── go.mod│   ├── go.sum│   └── main.go├── go-list_pipe_programmable-gtree│   ├── README.md│   ├── go.mod│   ├── go.sum│   └── main.go├── like_cli│   ├── adapter│   │   ├── executor.go│   │   └── indentation.go│   └── main.go├── noexist│   └── xxx└── programmable    └── main.go6 directories, 14 files$cat testdata/sample9.md- example        - README.md        - find_pipe_programmable-gtree                - README.md                - go.mod                - go.sum                - main.go        - go-list_pipe_programmable-gtree                - README.md                - go.mod                - go.sum                - main.go        - like_cli                - adapter                        - executor.go                        - indentation.go                - main.go                - kkk        - programmable                - main.go$cat testdata/sample9.md| gtree verify --strictExtra paths exist:        example/noexist        example/noexist/xxxRequired paths does not exist:        example/like_cli/kkk

inspired bymactat/framed !

Library - Markdown to tree structure

Installation

Go version requires 1.24 or later.

$go get github.com/ddddddO/gtree

Usage

The symbols that can be used in Markdown are*,-,+, and#.

FunctionDescriptionAvailable optional functions
OutputFromMarkdowncan output treesWithBranchFormatIntermedialNode
WithBranchFormatLastNode
WithEncodeJSON
WithEncodeTOML
WithEncodeYAML
WithMassive
MkdirFromMarkdowncan create directoriesWithTargetDir
WithFileExtensions
WithDryRun
WithMassive
VerifyFromMarkdowncan output the difference between markdown and directoriesWithTargetDir
WithStrictVerify
WithMassive
WalkFromMarkdowncan execute user-defined function while traversing tree structure recursivelyWithBranchFormatIntermedialNode
WithBranchFormatLastNode
WithMassive

Library - Programmable tree structure

Note

There are sample repositories that use gtree library.
Seehere for details.

Installation

Go version requires 1.24 or later.

$go get github.com/ddddddO/gtree

Usage

FunctionDescriptionAvailable optional functions
OutputFromRootcan output treeWithBranchFormatIntermedialNode
WithBranchFormatLastNode
WithEncodeJSON
WithEncodeTOML
WithEncodeYAML
MkdirFromRootcan create directoriesWithTargetDir
WithFileExtensions
WithDryRun
VerifyFromRootcan output the difference between tree you composed and directoriesWithTargetDir
WithStrictVerify
WalkFromRootcan execute user-defined function while traversing tree structure recursivelyWithBranchFormatIntermedialNode
WithBranchFormatLastNode
WalkIterFromRootit returns each node resulting from a recursive traversal of the tree structure, so you can process on each nodeWithBranchFormatIntermedialNode
WithBranchFormatLastNode

Process

Note

This process is for the Massive Roots mode.

Performance

see
ddddddo@debian:~/github.com/ddddddO/gtree$make benchrm -rf ./root/ ./root1/ ./root2/ ./root3/ ./root4/ ./root5/ ./root6/ ./root7/ ./root8/ Primate/ gtree/rm -rf ./root_a/ ./root_b/ ./root_c/ ./root_d/ ./root_e/ ./root_f/ ./root_g/ ./root_h/ ./root_i/ ./root_j/go test -benchmem -bench Benchmark -benchtime 100x benchmark_simple_test.gogoos: linuxgoarch: amd64cpu: 13th Gen Intel(R) Core(TM) i7-1370PBenchmarkOutput_simple_singleRoot-20                 100             10149 ns/op            9987 B/op        231 allocs/opBenchmarkOutput_simple_tenRoots-20                   100             70643 ns/op           59373 B/op       2121 allocs/opBenchmarkOutput_simple_fiftyRoots-20                 100            315096 ns/op          281426 B/op      10488 allocs/opBenchmarkOutput_simple_hundredRoots-20               100            586092 ns/op          578288 B/op      20942 allocs/opBenchmarkOutput_simple_fiveHundredsRoots-20          100           2934791 ns/op         2817802 B/op     104552 allocs/opBenchmarkOutput_simple_thousandRoots-20              100           6264854 ns/op         5785893 B/op     209058 allocs/opBenchmarkOutput_simple_3000Roots-20                  100          18641680 ns/op        17045688 B/op     627068 allocs/opBenchmarkOutput_simple_6000Roots-20                  100          38605597 ns/op        34247794 B/op    1254075 allocs/opBenchmarkOutput_simple_10000Roots-20                 100          79987941 ns/op        59397951 B/op    2090080 allocs/opBenchmarkOutput_simple_20000Roots-20                 100         153445564 ns/op        118746704 B/op   4180088 allocs/opPASSok      command-line-arguments  30.503sgo test -benchmem -bench Benchmark -benchtime 100x benchmark_pipeline_test.gogoos: linuxgoarch: amd64cpu: 13th Gen Intel(R) Core(TM) i7-1370PBenchmarkOutput_pipeline_singleRoot-20                       100             67536 ns/op           20754 B/op        356 allocs/opBenchmarkOutput_pipeline_tenRoots-20                         100            235060 ns/op          115166 B/op       2715 allocs/opBenchmarkOutput_pipeline_fiftyRoots-20                       100            800429 ns/op          544849 B/op      13215 allocs/opBenchmarkOutput_pipeline_hundredRoots-20                     100           1566669 ns/op         1098099 B/op      26321 allocs/opBenchmarkOutput_pipeline_fiveHundredsRoots-20                100           9370155 ns/op         5395556 B/op     131178 allocs/opBenchmarkOutput_pipeline_thousandRoots-20                    100          19935090 ns/op        10937746 B/op     262249 allocs/opBenchmarkOutput_pipeline_3000Roots-20                        100          61218588 ns/op        32470598 B/op     786461 allocs/opBenchmarkOutput_pipeline_6000Roots-20                        100         140668786 ns/op        65080805 B/op    1572765 allocs/opBenchmarkOutput_pipeline_10000Roots-20                       100         251359838 ns/op        110717084 B/op   2621057 allocs/opBenchmarkOutput_pipeline_20000Roots-20                       100         517510413 ns/op        221188080 B/op   5241583 allocs/opPASSok      command-line-arguments  101.444sgo test -benchmem -bench Benchmark -benchtime 100x benchmark_iterator_test.gogoos: linuxgoarch: amd64cpu: 13th Gen Intel(R) Core(TM) i7-1370PBenchmarkOutput_iterator_singleRoot-20                       100             23219 ns/op           10966 B/op        265 allocs/opBenchmarkOutput_iterator_tenRoots-20                         100             95018 ns/op           60049 B/op       2151 allocs/opBenchmarkOutput_iterator_fiftyRoots-20                       100            415429 ns/op          281107 B/op      10516 allocs/opBenchmarkOutput_iterator_hundredRoots-20                     100            801343 ns/op          576557 B/op      20969 allocs/opBenchmarkOutput_iterator_fiveHundredsRoots-20                100           4025727 ns/op         2807096 B/op     104577 allocs/opBenchmarkOutput_iterator_thousandRoots-20                    100           8343427 ns/op         5765146 B/op     209084 allocs/opBenchmarkOutput_iterator_3000Roots-20                        100          20800851 ns/op        16965023 B/op     627100 allocs/opBenchmarkOutput_iterator_6000Roots-20                        100          46313662 ns/op        34079177 B/op    1254118 allocs/opBenchmarkOutput_iterator_10000Roots-20                       100          74729899 ns/op        59063939 B/op    2090141 allocs/opBenchmarkOutput_iterator_20000Roots-20                       100         151050139 ns/op        117922359 B/op   4180162 allocs/opPASSok      command-line-arguments  31.057sddddddo@debian:~/github.com/ddddddO/gtree$
old data

[!WARNING]The following benchmarks are for simple implementation before iterator implementation. The simple implementation is now an iterator implementation, and the performance of the simple implementation is better.Depends on the environment.

  • Comparison simple implementation and pipeline implementation.
  • In the case of few Roots, simple implementation is faster in execution!
    • Use this one by default.
  • However, for multiple Roots, pipeline implementation execution speed tends to be faster💪✨
    • In the CLI, it is available by specifying--massive.
    • In the Go program, it is available by specifyingWithMassive func.
Benchmark log

Simple implementation

11:19:22 >gotest -benchmem -bench Benchmark -benchtime 100x benchmark_simple_test.gogoos: linuxgoarch: amd64cpu: Intel(R) Core(TM) i5-7200U CPU @ 2.50GHzBenchmarkOutput_singleRoot-4                 100             35375 ns/op           13856 B/op        171 allocs/opBenchmarkOutput_tenRoots-4                   100            200540 ns/op           72920 B/op       1597 allocs/opBenchmarkOutput_fiftyRoots-4                 100            730156 ns/op          569851 B/op       7919 allocs/opBenchmarkOutput_hundredRoots-4               100           1706493 ns/op         1714260 B/op      15820 allocs/opBenchmarkOutput_fiveHundredsRoots-4          100          16412090 ns/op        32245140 B/op      79022 allocs/opBenchmarkOutput_thousandRoots-4              100          55142492 ns/op        120929674 B/op    158025 allocs/opBenchmarkOutput_3000Roots-4                  100         489121246 ns/op        1035617527 B/op   474029 allocs/opBenchmarkOutput_6000Roots-4                  100        1613641261 ns/op        4087694372 B/op   948033 allocs/opBenchmarkOutput_10000Roots-4                 100        3913090646 ns/op        11293191221 B/op         1580035 allocs/opPASSok      command-line-arguments  614.944s

Pipeline implementation

11:29:43 >gotest -benchmem -bench Benchmark -benchtime 100x benchmark_pipeline_test.gogoos: linuxgoarch: amd64cpu: Intel(R) Core(TM) i5-7200U CPU @ 2.50GHzBenchmarkOutput_pipeline_singleRoot-4                100            188706 ns/op           24236 B/op        300 allocs/opBenchmarkOutput_pipeline_tenRoots-4                  100            367758 ns/op          115970 B/op       2186 allocs/opBenchmarkOutput_pipeline_fiftyRoots-4                100            947879 ns/op          542188 B/op      10592 allocs/opBenchmarkOutput_pipeline_hundredRoots-4              100           1711537 ns/op         1099636 B/op      21094 allocs/opBenchmarkOutput_pipeline_fiveHundredsRoots-4         100           6892261 ns/op         5524905 B/op     105107 allocs/opBenchmarkOutput_pipeline_thousandRoots-4             100          13100335 ns/op        11225942 B/op     210115 allocs/opBenchmarkOutput_pipeline_3000Roots-4                 100          40694497 ns/op        33399766 B/op     630142 allocs/opBenchmarkOutput_pipeline_6000Roots-4                 100          85807944 ns/op        66974524 B/op    1260171 allocs/opBenchmarkOutput_pipeline_10000Roots-4                100         151486713 ns/op        113908462 B/op   2100208 allocs/opPASSok      command-line-arguments  30.670s

Documents

English

Japanese

Test coverage

treemap

...generated bynikolaydubina/go-cover-treemap !

Stargazers over time

Stargazers over time

Footnotes

  1. Gopher retrieved fromegonelbre/gophers !

About

Using either Markdown or Programmatically to generate trees🌳 and directories📁, and to verify directories🔍. Provide CLI, Go package and Web.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

 
 
 

[8]ページ先頭

©2009-2025 Movatter.jp