前言
不知各位掘友日常开发中搜索本地磁盘上某个文件或者某个重要字符内容,但又不知道在哪里,又或不知道是哪个文件,诸位是如何解决的? 这样场景很多。
今天就把以前在运维同事学到的小技巧分享给掘友,前运维同事,那指法了得,find, grep, vim, cat… 常用快捷键+命令,让人眼花缭乱,工作效率杠杠的。在前同事的影响下,我的日常search习惯也慢慢转变为命令行,即使开发平台是Windows, 我依然设法使用类Linux
环境 — MINGW
使用find/grep去查找文件或者关键字内容。
几个日常使用频率高的find, grep 基本覆盖了开发者面对的日常搜索情形。
1. find -name/-iname "文件名的key word"
2. find -name/-iname -type d "文件夹key word"
3. find -name "key word" -exec rm -rf {} \;
4. find -name "xxx.java" -exec grep -rn "key word" \;
你先行
上图是日常写的一部分demo,经年累月,现在要去快速找到之前写的反射例子Java文件,肯定是记不住的,也没有必要记住啊, 有find老哥在。现在依稀记文件名好像包含了 Reflct
,大小写,我也不确定,
find 文件 -name / -iname
$ find -name "Reflect*.java" ==> -name 是大小写敏感的,加上通配符*
./JavaDemo/src/ReflectionDemo.java
$ find -name "*Reflect*.java" ==> -name 是大小写敏感的, 加上通配符*
./JavaDemo/src/ReflectionDemo.java
./JavaDemo/src/TestReflection.java
./JavaDemo/src/TestReflection2.java
find -name "*reflect*.java" ==> -name 是大小写敏感的, 可以使用 -iname, 加上通配符*
没有任何匹配结果
$ find -iname "*reflect*.java" ==> 使用-iname, 以及通配符
./JavaDemo/src/ReflectionDemo.java
./JavaDemo/src/TestReflection.java
./JavaDemo/src/TestReflection2.java
find 目录
想把当前目录及其子目录中的src
文件夹找到显示出来,怎么办?
$ find -type d -name[或者-iname] "src"
./android-mvp/IDouban/app/src
./android-mvp/IDouban/lib/src
./android-paging-master/app/src
省略....
$ find -iname "java" -type d -iname "java*"
./android-mvp/IDouban/app/src/androidTest/java
./android-mvp/IDouban/app/src/main/java
./android-mvp/IDouban/app/src/test/java
./android-mvp/IDouban/lib/src/main/java
省略....
find 组合其他cmd
使用find+其他cmd,常用的有
- find + rm 删除文件夹
- find + rm 删除文件
- find + grep 查找指定条件文件中的指定内容
find + rm 删除文件夹
经年累月的各种demo运行后,会有很多build
文件夹,这些也是占用磁盘空间团伙,删除之。
先用 find
查找build
文件夹 看看效果。
$ find -name "build" -type d
./app/build
./customview/build
./memoryleak/build
./purekotlin/build
再来find + rm 组合删除build
$ find -name "build" -type d -exec rm -rf {} \; ==> 注意结尾有个 \;
find: ‘./app/build’: No such file or directory
find: ‘./customview/build’: No such file or directory
find: ‘./memoryleak/build’: No such file or directory
find: ‘./purekotlin/build’: No such file or directory
NOTE: 上面显示
No such...
其实是删除成功了的,记得以前纯Linux下的没有找个提示的,anyway,find + rm 删除文件夹 搞定!
find + rm 删除文件
同样的操作,找到你想删除的文件 然后删除他们。
$find -name "*Activity.class" -exec rm -rf {} \;
$ find -name "*Activity.class" -exec rm -rf {} \;
指定类型的文件 找到并删除了!
find + grep
这个组合也是经常用到,而且好用。 单独的grep
是要全部查询,假如你知道某个字符串在某个特定的文件中,没必要整个目录挨个文件去搜寻。回到场景中,我要找文件名字中含有Test
关键字的java文件中 含有 public void main
的Java文件。
$ find -name "Test*.java" -exec grep -rn "public static void main" \;
NOTE: 这套组合命令 有个小问题,命令执行后显示的结果列表会重复好几次, 我是没找到原因, 估计我这种组合搭配 姿势不对。
要是使用 这套 $ find -name "Test*.java" -exec grep -rn "public static void main" {} \;
显示的结果又太单调了。
grep 老哥
展示完常用的find
, 那就必须提到grep
, 你可以理解,它是查找内容的,查询关键字在哪些文件中。也是高频cmd。不过,我基本是 配合find
使用, 再来一次。
$ find -iname "chapter*.kt" -exec grep -rn "main()" * \;
kotlin/src/main/kotlin/algorithms/Algorithms01.kt:3:fun main() {
kotlin/src/main/kotlin/algorithms/Rabbit.kt:3:fun main() {
kotlin/src/main/kotlin/algorithms/Words.kt:7:fun main() {
kotlin/src/main/kotlin/blog/extension/DelegatedProperty.kt:6://fun main() {
kotlin/src/main/kotlin/blog/extension/DelegatedProperty.kt:37://fun main() {
grep
也是有好多参数,选项的,按需去查询即可。
如果你看到了这里,觉得文章写得不错就给个赞呗?
敲代码不易,关注一下吧。ღ( ´・ᴗ・` )