Knighthana
文章109
标签148
分类7

文章归档

(KM)让shell像资源管理器一样便捷

(KM)让shell像资源管理器一样便捷

让shell像资源管理器一样便捷

在传统入门级的shell操作中,主要靠lscd实现展示、转移工作目录的操作;

如何在shell中,尽可能用“原生”的方式让目录操作方便快捷?

tree

tree可以得到目录树,但是不便捷的地方在于tree默认展示全部目录反而会失去重点,

因此如果获取限制方法,可以让tree更好用;

tree的组合命令顺序是tree [选项] [路径]

排除指定名称

通过-I选项,可以让tree排除指定目录;

用一个例子展示当前对Blog-Active目录的管理方法,排除掉node_modulespublicsource三个目录;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
➜  workspace tree -I "node_modules|public|source" Blog-Active
Blog-Active
├── _config.nexmoe.yml
├── _config.yml
├── applychanges.sh
├── db.json
├── package-lock.json
├── package.json
├── scaffolds
│   ├── blogmaintenance.md
│   ├── dev-code.md
│   ├── dev-env.md
│   ├── draft.md
│   ├── knowledgemark.md
│   ├── page.md
│   └── post.md
└── themes

3 directories, 13 files

限制目录层级

通过-L选项可以让tree只展示指定层数的目录;

例如在忽略node_modules的前提下,只展示两层-L 2目录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
➜  workspace tree -L 2 -I "node_modules" Blog-Active
Blog-Active
├── _config.nexmoe.yml
├── _config.yml
├── applychanges.sh
├── db.json
├── package-lock.json
├── package.json
├── public
│   ├── 404.html
│   ├── Blog-Maintenance
│   ├── BlogMaintenance
│   ├── Book-Mark
│   ├── BookMark
│   ├── Cooking
│   ├── Dev-Code
│   ├── Dev-Env
│   ├── KnowledgeMark
│   ├── about.html
│   ├── archives
│   ├── archives.html
│   ├── atom.xml
│   ├── categories
│   ├── content.json
│   ├── css
│   ├── favicon.png
│   ├── img
│   ├── index.html
│   ├── js
│   ├── lib
│   ├── page
│   ├── preset
│   ├── subject-note
│   ├── tags
│   └── uncategorized
├── scaffolds
│   ├── blogmaintenance.md
│   ├── dev-code.md
│   ├── dev-env.md
│   ├── draft.md
│   ├── knowledgemark.md
│   ├── page.md
│   └── post.md
├── source
│   ├── 404.md
│   ├── _drafts
│   ├── _posts -> /home/knighthana/workspace/knighthana.github.io/raw
│   ├── about.md
│   ├── archives.md
│   ├── favicon.png
│   └── img
└── themes

其他可能要用到的

参数 作用 特别说明
-I pattern 忽略匹配的文件/目录 支持通配符,用竖线 \| 分隔多个模式,比如 -I "node_modules\|.git"
-P pattern 只显示匹配的文件/目录 同样支持通配符,比如 -P "*.html" 只显示HTML文件。
-d 仅显示目录 隐藏普通文件,方便聚焦于文件夹结构。
-a 显示所有文件 包括以点开头的隐藏文件。
-h 以可读格式显示文件大小 比如显示 4K8M,需要结合 -s--du 一起用。
-o filename 输出结果到文件 比如 tree -o output.txt,将树状图保存下来,而不是打印在屏幕上。
--du 显示每个目录的累计大小 递归计算并显示每个目录下所有文件的总大小。
--prune 修剪空目录 在输出中不显示那些不包含任何文件的空目录。
--filelimit # 限制目录条目数 当目录下的文件/子目录数量超过 # 时,不再展开该目录。

目录栈pushd/popd

cd切换其实很不方便,即便有cd -,在键盘上也挺难摸到;

明明模模糊糊记得很早之前在目录里面进行过栈操作,

查证了一些确实有这些操作;

pushd用来把一个路径压进目录栈,之后跳转到这个路径的目录;

popd用来把栈顶路径弹出,也即跳转到栈顶路径的目录,随后删掉栈顶的记录;

dirs用来展示栈中的记录信息情况;