tree
lib//mac brew install tree //centos yum install tree //ubuntu apt-get install tree
//顯示全部文件 tree //顯示深度2層 tree -L 2
find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g' > structure.txt
find . -print | grep -v "node" | sed -e 's;[^/]*/;|____;g;s;____|; |;g' > structure.txt
缺點: 不能打印深度選擇,或者須要更高層次的語法編寫。這裏姑且先用着。夠用了。javascript
windows自帶tree命令。默認只顯示目錄css
//只顯示目錄 tree //顯示文件 tree /f //輸出到文件 tree /f > structure.txt
但,因爲windows命令不熟悉,也不想花時間去學習windows的命令。那麼能夠裝一個git shell或者推薦使用cmder。html
手動寫一個列表。先序遍歷:java
/** * 先序遍歷 postorder traversal 先輸出根節點,而後輸出子節點 * Created by Ryan Miao on 9/24/17. */ public class PostorderTraversal { @Test public void testPostOrder() { String root = "/Users/ryan/workspace/learning/hexo-blog-src"; int stop = 3; ArrayList<String> ignores = Lists.newArrayList(".git", ".deploy_git", "node_modules", ".DS_Store"); printTree(root, stop, ignores); } private void printTree(String rootFile, int stop, List<String> ignores) { printTree(new File(rootFile), 0, stop, ignores, false, true); } private void printTree(File rootFile, int level, int stop, List<String> ignores, boolean isLastChild, boolean isParentLast) { String name = rootFile.getName(); if (level > stop || ignores.stream().anyMatch(name::contains)) { return; } if (level == 0) { System.out.println("."); } else { prettyPrint(level, rootFile, isLastChild, isParentLast); } if (rootFile.isDirectory()) { File[] files = rootFile.listFiles(); if (files != null) { int length = files.length; for (int i = 0; i < length; i++) { if (i == length - 1) { // printTree(files[i], level + 1, stop, ignores, true, isLastChild); } else { printTree(files[i], level + 1, stop, ignores, false, isLastChild); } } } } } private void prettyPrint(int level, File file, boolean isLastChild, boolean isParentLast) { StringBuilder sb = new StringBuilder(); if (level != 1) { sb.append("│"); } for (int i = 0; i < level - 2; i++) { if (isParentLast && i == level - 3) { sb.append(" "); break; } sb.append(" |"); } if (level != 1) { sb.append(" "); } if (isLastChild) { sb.append("└──"); } else { sb.append("├──"); } sb.append(file.getName()); System.out.println(sb.toString()); } }
目前有個bug,就是遞歸到深刻以後,孫子沒法得知祖父是否是最終葉子,所以虛線沒有去掉。不過,簡單能用仍是能夠的。
console output:node
. ├──_config.yml ├──db.json ├──package-lock.json ├──package.json ├──public │ ├──2017 │ | ├──05 │ | ├──06 │ | ├──07 │ | ├──08 │ | └──09 │ ├──404.html │ ├──about │ | └──index.html │ ├──archives │ | ├──2017 │ | ├──index.html │ | └──page │ ├──baidusitemap.xml │ ├──categories │ | ├──Cache │ | ├──Git │ | ├──Hexo │ | ├──index.html │ | ├──Java │ | ├──Java8 │ | ├──Javascript │ | ├──Linux │ | ├──MySQL │ | ├──ReactJS │ | ├──redis │ | ├──Server │ | ├──Spring │ | ├──Tools │ | ├──思考 │ | └──讀書 │ ├──CNAME │ ├──css │ | └──main.css │ ├──gallery │ | └──index.html │ ├──images │ | ├──algolia_logo.svg │ | ├──alipay.jpg │ | ├──avatar.gif │ | ├──avatar.jpeg │ | ├──bk.bmp │ | ├──bk.jpg │ | ├──bk.png │ | ├──bk2.jpg │ | ├──cc-by-nc-nd.svg │ | ├──cc-by-nc-sa.svg │ | ├──cc-by-nc.svg │ | ├──cc-by-nd.svg │ | ├──cc-by-sa.svg │ | ├──cc-by.svg │ | ├──cc-zero.svg │ | ├──loading.gif │ | ├──placeholder.gif │ | ├──quote-l.svg │ | ├──quote-r.svg │ | ├──searchicon.png │ | └──wechat.jpg │ ├──index.html │ ├──js │ | └──src │ ├──lib │ | ├──algolia-instant-search │ | ├──canvas-nest │ | ├──canvas-ribbon │ | ├──fancybox │ | ├──fastclick │ | ├──font-awesome │ | ├──Han │ | ├──jquery │ | ├──jquery_lazyload │ | ├──pace │ | ├──three │ | ├──ua-parser-js │ | └──velocity │ ├──links │ | └──index.html │ ├──page │ | ├──2 │ | └──3 │ ├──search.xml │ ├──sitemap.xml │ └──tags │ ├──ArrayList │ ├──banner │ ├──Dropwizard │ ├──EhCache │ ├──Feign │ ├──Git │ ├──Hexo │ ├──index.html │ ├──Java │ ├──Java8 │ ├──Javascript │ ├──Lambda │ ├──Linux │ ├──Mac │ ├──MySQL │ ├──NodeJS │ ├──ReactJS │ ├──reading │ ├──redis │ ├──Server │ ├──Spring │ ├──SpringMVC │ ├──team │ ├──UTF-8 │ ├──vim │ ├──Webpack │ ├──Windows │ └──碼雲 ├──README.md ├──scaffolds │ ├──draft.md │ ├──page.md │ └──post.md ├──source │ ├──404.html │ ├──_data │ | └──links.yml │ ├──_posts │ | ├──banner-ascii-2-txt.md │ | ├──dropwizard-feign.md │ | ├──Ehcache3入門-Spring集成.md │ | ├──git-rebase.md │ | ├──hello-react-js.md │ | ├──hello-world.md │ | ├──hexo-github-oschina.md │ | ├──hexo-next-hypercomments.md │ | ├──hexo-next-shang.md │ | ├──http-server-static.md │ | ├──Java-ArrayList-remove.md │ | ├──java-utf8-iso-亂碼根源.md │ | ├──java8-in-action-2.md │ | ├──java8-lambda.md │ | ├──js-cros.md │ | ├──mac-install-mysql.md │ | ├──mac-install-redis.md │ | ├──react-tutorial-1.md │ | ├──reading-schedule.md │ | ├──spring400.md │ | ├──switch-to-oschina.md │ | ├──team-first-chance.md │ | ├──tree.md │ | ├──vim.md │ | └──why-string-is-immutable.md │ ├──about │ | └──index.md │ ├──categories │ | └──index.md │ ├──CNAME │ ├──gallery │ | └──index.md │ ├──images │ | ├──alipay.jpg │ | ├──avatar.jpeg │ | ├──bk.bmp │ | ├──bk.jpg │ | ├──bk.png │ | ├──bk2.jpg │ | └──wechat.jpg │ ├──links │ | └──index.md │ └──tags │ └──index.md ├──themes │ ├──landscape │ | ├──_config.yml │ | ├──Gruntfile.js │ | ├──languages │ | ├──layout │ | ├──LICENSE │ | ├──package.json │ | ├──README.md │ | ├──scripts │ | └──source │ └──next │ ├──.bowerrc │ ├──.editorconfig │ ├──.hound.yml │ ├──.javascript_ignore │ ├──.jshintrc │ ├──.stylintrc │ ├──.travis.yml │ ├──_config.yml │ ├──bower.json │ ├──gulpfile.coffee │ ├──languages │ ├──layout │ ├──LICENSE │ ├──package.json │ ├──README.cn.md │ ├──README.md │ ├──scripts │ ├──source │ └──test └──thems-bak │ └──next │ ├──_config.yml │ └──custom.styl