find
是个在查找档案的指令,但是它的预设行为并不是这麽的直观,需要使用特定的参数才能以一般搜寻的思维(例如:不分大小写,搜寻部分字串)执行,这使得 find
在使用上不这麽地方便,甚至因为需要记忆特定参数而容易遗忘,需要重新查找文件,带给使用者不便。
fd
是个指令简单、快速且直观的查找指令,特色如下列所示:
fd PATTERN
取代 find -iname '*PATTERN*'
。PATTERN
为正则表达式与 glob 。PATTERN
包含有大写,则使用区分大小写的方式搜寻。.gitignore
的规则忽略档案。使用 Homebrew 安装 fd
:
brew install fd
安装完成後,就可以使用 fd
来进行查找了。
直接使用 fd
指令,在没有任何参数的情况下会列出当前目录下所有的档案与目录:
fd
在後面加上参数 PATTERN
:
fd card
fd
会以不区分大小写,并忽略隐藏档案(包含 .gitignore
)的方式对 PATTERN
进行查找。
fd
会以颜色区分不同类型的档案。
fd
有丰富的设定供使用者找到目标,可以使用 fd --help
观看详细的说明。接下来会介绍几个常用的操作。
fd
支援正规表达式:
> fd '^c.*d$'
gm-eb-proposal/frontend/vue-lbd-pro-html-v1.1.0/CHANGELOG.md
gm-eb-proposal/third-party/theme/light-bootstrap-dashboard-pro/CHANGELOG.md
fd
所使用的正规表达式语法可以参考 Docs.rs。
在第二个参数输入目录,搜索范围就会被限缩於此目录中。
fd card Documents/code
上例只会搜寻 Documents/code
中与 card
字串相符的档案。
使用 -e
可以搜寻拥有特定副档名的档案。
fd card -e vue
上例只会搜寻副档名为 vue
中与 card
字串相符的档案。
fd
预设会搜寻目录与档案,而且只需要匹配部分字串即可,如果要只搜寻特定档案的话,可以使用 -g
( glob )参数。
fd -g card.vue
上例只会搜寻名为 card.vue
的档案。
fd
预设不会查找隐藏档案,使用 -H
(或 --hidden
)来查找:
fd -H pre-commit
范例可以在原本隐藏的 .git
目录中查找 pre-commit
。
fd
预设会将 .gitignore
设定的目录及档案忽略,使用 -I
(或 --no-ignore
)来查找:
fd -I @vue
范例可以在原本被 .gitignore
忽略的 node_modules
中查找 @vue
。
使用者查找档案通常的目的都是用这些档案去执行特定的指令做处理, fd
提供了执行指令的方式:
-x
/ --exec
:每个结果分别带入指令同步执行。-X
/ --exec-batch
:所有的结果一起带入指令执行(只执行一次)。> fd -g '*.js' -x yarn prettier --write
prettier --write config/storybook/main.js
prettier --write config/storybook/preview.js
上例会将每个搜索到的 .js
档案给予 yarn lint:prettier
作为参数执行。
如果将 -x
改为 -X
,会是所有的路径以空白分开带入指令:
> fd -g '*.js' -X yarn prettier --write
prettier --write config/storybook/main.js config/storybook/preview.js
fd
使用 Placeholder 语法让使用者决定要怎麽将结果带入指令中。
fd -g '*.js' -x yarn prettier --write {}
上例在指令的後面加上 {}
,表示要使用完整的结果作为参数,会跟没有设定时是一样的效果。
这里介绍各个 Placeholder 语法:
{}
:完整的路径,此为预设。( config/storybook/main.js
){.}
:剔除副档名。( config/storybook/main
){/}
:只保留最後一层。( main.js
){//}
:剔除最後一层。( config/storybook
){/.}
:只保留最後一层并剔除副档名。( main
)使用 -E
(或 --exclude
)排除档案或目录:
fd test -H -E .git
上例搜寻 test
要包含隐藏档案,但是要排除 .git
目录。
find
指令用以搜索档案与目录,但其使用方式不直观,造成使用者需要花时间习惯与记忆。fd
指令是 find
的优化版本,提供直观的使用方式,并且提供高效的搜寻体验。fd
会列出当前目录所有的档案与目录。fd PATTERN
会列出所有与 PATTERN
吻合的档案与目录。fd PATTERN /foo/bar
只会搜寻 /foo/bar
下的档案与目录。fd -e md
只会搜寻副档名为 md
的档案。fd -H foo
会连同隐藏档案都搜寻。fd -I foo
会连 .gitignore
忽略的档案都搜寻。fd foo -x echo
会将搜寻结果一个个带给指令 echo
同步做处理。fd foo -X echo
会将搜寻结果同时带给指令 echo
做处理。fd -x
所设定的指令可以利用 Placeholder 语法决定要如何带入搜寻结果。fd foo -E foo
会将 foo
目录或档案排除在结果外。
>>: EP12 - 重构并模组化 Terraform 程序码
Q1. Graph 是什麽 Graph 定义:一个 graph 由 数个点( vertex )与数个...
今天来用decision tree做一个预测肿瘤是恶性还是良性的应用,在这里就略过前期的资料处理与分...
今天的内容是Express部份的最後一哩路:Restful API与应用程序结构化。前几天从前端到後...
前言 这是个人很久以前在闲暇之余写的一个专案,技术多为爬虫观念,後来整合 GitHub Action...
模板语法 在上一篇我们已经完成了我们第一个 Vue 建出来的 Hello Vue 网页,其中我们有学...