tree命令-一鍵生成目錄結構

1.tree是什麼

瀏覽博客的時候,我相信不少人都跟我同樣,看到過不少文章裏都有很漂亮的目錄結構。好比這樣子。css

.
└── test
    ├── css
    ├── img
    │   └── head
    └── js

複製代碼

看到這樣的目錄結果,打心底裏以爲舒服——簡潔、優雅,在這個世界上只有格子衫能匹配這樣的美了。html

但是等到本身寫博客想搞目錄結構的時候就捉急了。這是怎麼生成的呢?真是百思不得其姐。百度也不知道如何下手。當年爲了在博客上搞個目錄結構,我是硬生生用鍵盤敲上去的。後來也是偶然的機會才知道有tree這個工具。jquery

今天就講解下tree命令。linux

2. tree的使用方法

tree [OPTIONS] [directory]shell

tree 常見的命令以下:npm

  • -a 顯示全部文件和目錄。
  • -A 使用ASNI繪圖字符顯示樹狀圖而非以ASCII字符組合。
  • -C 在文件和目錄清單加上色彩,便於區分各類類型。
  • -d 顯示目錄名稱而非內容。
  • -D 列出文件或目錄的更改時間。
  • -f 在每一個文件或目錄以前,顯示完整的相對路徑名稱。
  • -F 根據ls -F,爲目錄添加一個'/',爲套接字文件添加一個'=',爲可執行文件添加一個' *',爲FIFO添加一個' |'
  • -g 列出文件或目錄的所屬羣組名稱,沒有對應的名稱時,則顯示羣組識別碼。
  • -i 不以階梯狀列出文件或目錄名稱。
  • -I 不顯示符合範本樣式的文件或目錄名稱。
  • -l 跟隨目錄的符號連接,就像它們是目錄同樣。避免了致使遞歸循環的連接
  • -n 不在文件和目錄清單加上色彩。
  • -N 按原樣打印不可打印的字符。
  • -p 列出權限標示。
  • -P 只顯示符合範本樣式的文件或目錄名稱。
  • -q 將文件名中的不可打印字符做爲問號打印。
  • -s 列出文件或目錄大小。
  • -t 用文件和目錄的更改時間排序。
  • -u 列出文件或目錄的擁有者名稱,沒有對應的名稱時,則顯示用戶識別碼。
  • -x 將範圍侷限在現行的文件系統中,若指定目錄下的某些子目錄,其存放於另外一個文件系統上,則將該子目錄予以排除在尋找範圍外。

3 tree命令的詳細講解

我有一個test文件夾,文件夾下有以下文件。(如下目錄結構爲手敲,原本想截圖,惋惜個人makedown不支持圖片)bash

  • css
    • main.css
    • jquery-ui.css
  • img
    • head
      • b.png
    • a.png
  • js index.js
  • .bablelrc
  • hide.txt
  • index.html
  • 說明.txt

咱們以這個目錄爲例子,來講明tree的用法。有幾點須要特殊說明。babel

  • bable的配置文件babelrc是沒有文件名的
  • 說明.txt的文件名是中文
  • hide.txt文件屬性是隱藏

如下命令都是在test文件夾下打開命令行,而後執行命令的。ide

3.1 直接執行tree命令

直接在命令行(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

複製代碼

3.2 tree a

顯示全部的文件和目錄,包裹不含文件名的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

複製代碼

3.3 tree -A (注意這裏是大A)

使用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碼相同,以後的字符全是某個國家語言的全部字符。

3.4 tree -C

.
└── test
    ├── css
    │   ├── jquery-ui.css
    │   └── main.css
    ├── hide.txt
    ├── img
    │   ├── a.png
    │   └── head
    │       └── b.png
    ├── index.html
    ├── js
    │   └── index.js
    └── 說明.txt

複製代碼

補充:若是未設置LS_COLORS環境變量,則使用內置顏色默認值始終打開顏色。用於將輸出着色到管道。

3.5 tree -d

顯示目錄名稱而非內容

tree -d
複製代碼
.
└── test
    ├── css
    ├── img
    │   └── head
    └── js



複製代碼

3.6 tree -f

在每一個文件或目錄以前,顯示完整的相對路徑名稱

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
        
複製代碼

3.7 tree -F

根據ls -F,爲目錄添加一個' /',爲套接字文件添加一個' =',爲可執行文件添加一個' *',爲FIFO添加一個' |'

.
└── test/
    ├── css/
    │   ├── jquery-ui.css*
    │   └── main.css*
    ├── hide.txt*
    ├── img/
    │   ├── a.png*
    │   └── head/
    │       └── b.png*
    ├── index.html*
    ├── js/
    │   └── index.js*
    └── 說明.txt*

複製代碼

3.8 tree -g

列出文件或目錄的所屬羣組名稱(其實就是文件所屬用戶組名稱),沒有對應的名稱時,則顯示羣組識別碼。

.
└── [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

複製代碼

3.9 tree -i

不以階梯狀列出文件或目錄名稱

.
test
css
jquery-ui.css
main.css
hide.txt
img
a.png
head
b.png
index.html
js
index.js
說明.txt

複製代碼

3.10 tree -I pattern

其中pattern爲通配符,不顯示符合的文件或目錄名稱。

好比咱們不顯示css文件

tree -I *.css
複製代碼
.
└── test
    ├── css
    ├── hide.txt
    ├── img
    │   ├── a.png
    │   └── head
    │       └── b.png
    ├── index.html
    ├── js
    │   └── index.js
    └── 說明.txt
複製代碼

3.11 tree -l

跟隨目錄的符號連接,就像它們是目錄同樣。 避免了致使遞歸循環的連接。(不知道這個是幹嗎的,測試也沒效果。若是有人知道請告訴我)

3.12 tree -n

不在文件和目錄清單加上色彩。(默認控制檯打印出來的目錄結構中,文件夾是高亮的,使用-n後,文件夾就不高亮了)

3.13 tree -N

按原樣打印不可打印的字符。(看起來也沒啥效果,應該是個人測試案例太正常了)。通過大佬提醒,若是中文名是中文,不加-N有些電腦上是亂碼的。

.
└── test
    ├── css
    │   ├── jquery-ui.css
    │   └── main.css
    ├── hide.txt
    ├── img
    │   ├── a.png
    │   └── head
    │       └── b.png
    ├── index.html
    ├── js
    │   └── index.js
    └── 說明.txt
複製代碼

3.14 tree -p

列出權限標示

.
└── [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

複製代碼

3.15 tree -P(大寫) pattern

僅列出與通配符模式匹配的文件。

好比僅顯示css文件

tree -P *.css
複製代碼
.
└── test
    ├── css
    │   ├── jquery-ui.css
    │   └── main.css
    ├── img
    │   └── head
    └── js

複製代碼

注意:您必須使用-a選項來考慮以點「.」開頭的那些文件。有效的通配符運算符是*匹配任何零個或多個字符,?匹配任何單個字符,[...]匹配括號內列出的任何單個字符,[^...]匹配非[]中的任意字符,(|)匹配|前的和後的表達式。

3.16 tree -P 配合 -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
複製代碼

3.17 tree -q

將文件名中的不可打印字符做爲問號打印。

由於個人文件名太正常了,因此測試不出來效果

.
└── test
    ├── css
    │   ├── jquery-ui.css
    │   └── main.css
    ├── hide.txt
    ├── img
    │   ├── a.png
    │   └── head
    │       └── b.png
    ├── index.html
    ├── js
    │   └── index.js
    └── 說明.txt
複製代碼

3.18 tree -s

列出文件或目錄大小。

.
└── [       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

複製代碼

3.19 tree -t

按照文件和目錄的更改時間排序。注意文件打印的順序不同了

.
└── test
    ├── index.html
    ├── js
    │   └── index.js
    ├── css
    │   ├── jquery-ui.css
    │   └── main.css
    ├── img
    │   ├── a.png
    │   └── head
    │       └── b.png
    ├── 說明.txt
    └── hide.txt

複製代碼

3.20 tree -u

列出文件或目錄的擁有者名稱,沒有對應的名稱時,則顯示用戶識別碼。

.
└── [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


複製代碼

3.21 tree -x

將範圍侷限在現行的文件系統中,若指定目錄下的某些子目錄,其存放於另外一個文件系統上,則將該子目錄予以排除在尋找範圍外

由於個人目錄太正常了,這個沒測試出來。

4 安裝tree

看到tree這麼強大,是否是很心動?不過tree只在linux和mac下才有這樣強大的效果。linux和mac下tree工具不是自帶的,須要安裝。

window是自帶tree的,不過實現的簡直不能再垃圾了,能夠用脖子如下都截肢來形容。爲此,我開發了一個npm包,來實現tree命令。

能夠點擊這裏進行安裝ctree-cli。若是有問題,歡迎提交issuses

相關文章
相關標籤/搜索