在日常的开发过程中,有时需要打印出代码的树状目录结构。
让我们看看如何使用Linux命令来打印目录的树形结构
Linux命令行 打印文件系统树结构有两种方式:
- 使用Linux tree命令
- 使用Linux find、awk和sed命令的组合命令。
使用linux tree命令打印目录树形结构
这里以 wordpress 博客的源代码做测试;
- 显示当前目录深度为1 的树形目录结构:
➜ tree -dL 1
.
├── wp-admin
├── wp-content
└── wp-includes
...
-d
仅列出目录
-L level
目录树的最大显示深度
显示当前目录深度为2的树形目录结构:
➜ tree -dL 2
.
├── wp-admin
│ ├── css
│ ├── images
│ ├── includes
│ ...
├── wp-content
│ ├── ew_backup
│ ├── languages
│ ├── plugins
│ ...
└── wp-includes
├── ID3
├── IXR
├── Requests
...
使用linux find 和 awk命令打印目录树形结构
➜ find . -type d | awk -F'/' '{
if(NF==2){print "|-- " $2 }else if(NF==3) {print "| |--" $3}}'
这个命令和tree命令一样,是一个打印深度为2的目录树结构。
|-- wp-admin
| |--css
| |--images
| |--js
| ...
|-- wp-includes
| |--blocks
| |--ID3
| |--SimplePie
| ...
|-- wp-content
| |--upgrade
| |--wflogs
| |--plugins
| ...
命令解释:
- 首先,列出当前目录下的所有目录结构;
➜ find . -type d
.
./wp-admin
./wp-admin/css
./wp-admin/css/colors
...
./wp-includes
./wp-includes/blocks
./wp-includes/ID3
...
- 然后,使用linux awk命令根据 “/” 分割行数据;
awk -F'/' '{
if(NF==2) {
print "|-- " $2
}else if(NF==3) {
print "| |--" $3
}
}'
当分隔字段的数目为2,表示树结构的根目录,则打印“|-”;
当分隔字段的书目为3,则表示树结构的叶节点,打印“| |–”;
好的,您可以打印一个两级树形目录结构。
如果我们需要打印多级树目录结构呢?难道要写多个if/else吗?
当然不。
如何使用linux find和awk组合命令打印多级树目录结构
find . -type d | awk -F'/' '{
depth=3;
offset=2;
str="| ";
path="";
if(NF >= 2 && NF < depth + offset) {
while(offset < NF) {
path = path "| ";
offset ++;
}
print path "|-- "$NF;
}
}'
depth:要打印的层数
可以通过修改 depth来实现要打印的树形目录层级。