如何让find/grep提升工作效率?

前言

不知各位掘友日常开发中搜索本地磁盘上某个文件或者某个重要字符内容,但又不知道在哪里,又或不知道是哪个文件,诸位是如何解决的? 这样场景很多。

今天就把以前在运维同事学到的小技巧分享给掘友,前运维同事,那指法了得,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 也是有好多参数,选项的,按需去查询即可。

在这里插入图片描述

如果你看到了这里,觉得文章写得不错就给个赞呗?
更多Android进阶指南 可以扫码 解锁更多Android进阶资料


在这里插入图片描述
敲代码不易,关注一下吧。ღ( ´・ᴗ・` )

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值