瀏覽博客的時候,我相信不少人都跟我同樣,看到過不少文章裏都有很漂亮的目錄結構。好比這樣子。css
.
└── test
├── css
├── img
│ └── head
└── js
複製代碼
看到這樣的目錄結果,打心底裏以爲舒服——簡潔、優雅,在這個世界上只有格子衫能匹配這樣的美了。html
但是等到本身寫博客想搞目錄結構的時候就捉急了。這是怎麼生成的呢?真是百思不得其姐。百度也不知道如何下手。當年爲了在博客上搞個目錄結構,我是硬生生用鍵盤敲上去的。後來也是偶然的機會才知道有tree這個工具。jquery
今天就講解下tree命令。linux
tree [OPTIONS] [directory]shell
tree 常見的命令以下:npm
我有一個test文件夾,文件夾下有以下文件。(如下目錄結構爲手敲,原本想截圖,惋惜個人makedown不支持圖片)bash
咱們以這個目錄爲例子,來講明tree的用法。有幾點須要特殊說明。babel
如下命令都是在test文件夾下打開命令行,而後執行命令的。ide
直接在命令行(terminal)上執行tree命令,工具
tree
複製代碼
顯示結果以下,顯示了全部的文件和目錄,除了沒有文件名的文件(bebel配置文件):
.
└── test
├── css
│ ├── jquery-ui.css
│ └── main.css
├── hide.txt
├── img
│ ├── a.png
│ └── head
│ └── b.png
├── index.html
├── js
│ └── index.js
└── 說明.txt
複製代碼
顯示全部的文件和目錄,包裹不含文件名的babel文件
tree a
複製代碼
.
└── test
├── .babelrc
├── css
│ ├── jquery-ui.css
│ └── main.css
├── hide.txt
├── img
│ ├── a.png
│ └── head
│ └── b.png
├── index.html
├── js
│ └── index.js
└── 說明.txt
複製代碼
使用ASNI繪圖字符顯示樹狀圖而非以ASCII字符組合。不包含沒有文件名的文件(這點很奇怪)
.
└── test
├── css
│ ├── jquery-ui.css
│ └── main.css
├── hide.txt
├── img
│ ├── a.png
│ └── head
│ └── b.png
├── index.html
├── js
│ └── index.js
└── 說明.txt
複製代碼
補充一點:ANSI編碼用0x00~0x7f範圍的1個字節來表示1個英文字符,超出一個字節的0x80~0xFFFF範圍來表示其餘語言的其餘字符。也就是說,ANSI碼僅在前126個與ASCII碼相同,以後的字符全是某個國家語言的全部字符。
.
└── test
├── css
│ ├── jquery-ui.css
│ └── main.css
├── hide.txt
├── img
│ ├── a.png
│ └── head
│ └── b.png
├── index.html
├── js
│ └── index.js
└── 說明.txt
複製代碼
補充:若是未設置LS_COLORS環境變量,則使用內置顏色默認值始終打開顏色。用於將輸出着色到管道。
顯示目錄名稱而非內容
tree -d
複製代碼
.
└── test
├── css
├── img
│ └── head
└── js
複製代碼
在每一個文件或目錄以前,顯示完整的相對路徑名稱
tree -f
複製代碼
.
└── ./test
├── ./test/css
│ ├── ./test/css/jquery-ui.css
│ └── ./test/css/main.css
├── ./test/img
│ ├── ./test/img/a.png
│ └── ./test/img/head
│ └── ./test/img/head/b.png
├── ./test/index.html
└── ./test/js
└── ./test/js/index.js
複製代碼
根據ls -F,爲目錄添加一個' /',爲套接字文件添加一個' =',爲可執行文件添加一個' *',爲FIFO添加一個' |'
.
└── test/
├── css/
│ ├── jquery-ui.css*
│ └── main.css*
├── hide.txt*
├── img/
│ ├── a.png*
│ └── head/
│ └── b.png*
├── index.html*
├── js/
│ └── index.js*
└── 說明.txt*
複製代碼
列出文件或目錄的所屬羣組名稱(其實就是文件所屬用戶組名稱),沒有對應的名稱時,則顯示羣組識別碼。
.
└── [root ] test
├── [root ] css
│ ├── [root ] jquery-ui.css
│ └── [root ] main.css
├── [root ] hide.txt
├── [root ] img
│ ├── [root ] a.png
│ └── [root ] head
│ └── [root ] b.png
├── [root ] index.html
├── [root ] js
│ └── [root ] index.js
└── [root ] 說明.txt
複製代碼
不以階梯狀列出文件或目錄名稱
.
test
css
jquery-ui.css
main.css
hide.txt
img
a.png
head
b.png
index.html
js
index.js
說明.txt
複製代碼
其中pattern爲通配符,不顯示符合的文件或目錄名稱。
好比咱們不顯示css文件
tree -I *.css
複製代碼
.
└── test
├── css
├── hide.txt
├── img
│ ├── a.png
│ └── head
│ └── b.png
├── index.html
├── js
│ └── index.js
└── 說明.txt
複製代碼
跟隨目錄的符號連接,就像它們是目錄同樣。 避免了致使遞歸循環的連接。(不知道這個是幹嗎的,測試也沒效果。若是有人知道請告訴我)
不在文件和目錄清單加上色彩。(默認控制檯打印出來的目錄結構中,文件夾是高亮的,使用-n後,文件夾就不高亮了)
按原樣打印不可打印的字符。(看起來也沒啥效果,應該是個人測試案例太正常了)。通過大佬提醒,若是中文名是中文,不加-N有些電腦上是亂碼的。
.
└── test
├── css
│ ├── jquery-ui.css
│ └── main.css
├── hide.txt
├── img
│ ├── a.png
│ └── head
│ └── b.png
├── index.html
├── js
│ └── index.js
└── 說明.txt
複製代碼
列出權限標示
.
└── [drwxrwxrwx] test
├── [drwxrwxrwx] css
│ ├── [-rwxrwxrwx] jquery-ui.css
│ └── [-rwxrwxrwx] main.css
├── [-rwxrwxrwx] hide.txt
├── [drwxrwxrwx] img
│ ├── [-rwxrwxrwx] a.png
│ └── [drwxrwxrwx] head
│ └── [-rwxrwxrwx] b.png
├── [-rwxrwxrwx] index.html
├── [drwxrwxrwx] js
│ └── [-rwxrwxrwx] index.js
└── [-rwxrwxrwx] 說明.txt
複製代碼
僅列出與通配符模式匹配的文件。
好比僅顯示css文件
tree -P *.css
複製代碼
.
└── test
├── css
│ ├── jquery-ui.css
│ └── main.css
├── img
│ └── head
└── js
複製代碼
注意:您必須使用-a選項來考慮以點「.」開頭的那些文件。有效的通配符運算符是*匹配任何零個或多個字符,?匹配任何單個字符,[...]匹配括號內列出的任何單個字符,[^...]匹配非[]中的任意字符,(|)匹配|前的和後的表達式。
這樣咱們就能夠打印出來全部的問題,包括隱藏的和沒有文件名的文件
tree -P *.* -a
複製代碼
.
└── test
├── .babelrc
├── css
│ ├── jquery-ui.css
│ └── main.css
├── hide.txt
├── img
│ ├── a.png
│ └── head
│ └── b.png
├── index.html
├── js
│ └── index.js
└── 說明.txt
複製代碼
將文件名中的不可打印字符做爲問號打印。
由於個人文件名太正常了,因此測試不出來效果
.
└── test
├── css
│ ├── jquery-ui.css
│ └── main.css
├── hide.txt
├── img
│ ├── a.png
│ └── head
│ └── b.png
├── index.html
├── js
│ └── index.js
└── 說明.txt
複製代碼
列出文件或目錄大小。
.
└── [ 4096] test
├── [ 4096] css
│ ├── [ 22175] jquery-ui.css
│ └── [ 2874] main.css
├── [ 0] hide.txt
├── [ 0] img
│ ├── [ 131037] a.png
│ └── [ 0] head
│ └── [ 131037] b.png
├── [ 4725] index.html
├── [ 0] js
│ └── [ 3942] index.js
└── [ 0] 說明.txt
複製代碼
按照文件和目錄的更改時間排序。注意文件打印的順序不同了
.
└── test
├── index.html
├── js
│ └── index.js
├── css
│ ├── jquery-ui.css
│ └── main.css
├── img
│ ├── a.png
│ └── head
│ └── b.png
├── 說明.txt
└── hide.txt
複製代碼
列出文件或目錄的擁有者名稱,沒有對應的名稱時,則顯示用戶識別碼。
.
└── [root ] test
├── [root ] css
│ ├── [root ] jquery-ui.css
│ └── [root ] main.css
├── [root ] hide.txt
├── [root ] img
│ ├── [root ] a.png
│ └── [root ] head
│ └── [root ] b.png
├── [root ] index.html
├── [root ] js
│ └── [root ] index.js
└── [root ] 說明.txt
複製代碼
將範圍侷限在現行的文件系統中,若指定目錄下的某些子目錄,其存放於另外一個文件系統上,則將該子目錄予以排除在尋找範圍外
由於個人目錄太正常了,這個沒測試出來。
看到tree這麼強大,是否是很心動?不過tree只在linux和mac下才有這樣強大的效果。linux和mac下tree工具不是自帶的,須要安裝。
window是自帶tree的,不過實現的簡直不能再垃圾了,能夠用脖子如下都截肢來形容。爲此,我開發了一個npm包,來實現tree命令。
能夠點擊這裏進行安裝ctree-cli。若是有問題,歡迎提交issuses