您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

帮你精通Linux:Find命令高阶操作4项动作

时间:2021-04-12 10:27:55  来源:今日头条  作者:权哥编程

前文中,我们详细阐述了linux中最复杂的Find命令的基础查询之八列属性:

帮你精通Linux:Find命令高阶操作4项动作

八列属性

本文将继续探讨其高级查询功能,将分为四个方面展开讨论:

  1. 预定义动作 Predefined-Actions
  2. 自定义动作 User-defined Actions
  3. 与grep协同动作
  4. Operator逻辑操作

一、预定义动作 Predefined Actions

搜索是第一步,第二步是处理搜索的结果。比如删除所有的搜索结果。

在Documents目录下,搜索空文档,然后删除。

$ find ~/Documents -maxdepth 3 -empty -type f |nl

删除操作需要第二步处理,我们使用循环结构和 read 命令

find ~/Documents -maxdepth 3 -empty -type f | while read line; do rm $line; done

为了避免每次都写上 while read line; do rm $line; done 这一段,Find 命令提供了很多定义的行为。拿上面删除搜索结果例子而言,只需后面加上 -delete 即可

find ~/Documents -maxdepth 3 -empty -type f -delete

我们前面已经接触到了 -ls 这个预定义的行为

find ~/Documents -maxdepth 3 -empty -type f -ls


其他的预定义动作还有:

1) -print 打印当前的结果到标准输出 (Terminal),这是默认的行为,不需要显式标注

2) -print0 是文件名中的空格等换行符用空值表示,与xargs 的 -0 配合使用。

3) -quit 匹配到一个结果后退出查询。

二、自定义动作 User-defined Actions

-print -ls 这些自定义动作,虽然很便捷,但其灵活性差的弊端也显著。比如上例中的 -ls 只有一种显示格式。

-exec (execute) 自定义执行

当需要更灵活多样的显示格式,需要引入 -exec (execute)

find ~/Documents -maxdepth 3 -empty -type f -exec ls -lh '{}' ';'

'{}' 指代前面所有的搜索结果,可以理解为前面的查询结果都放入到了 {} 这个篮子里,后面的 ;为命令分割符。

ok代替exec

exec 的替代选项是 -ok,每次执行前都会弹出提示要用户确认。处理删除任务时,-ok 是更加安全的选项。

find ~/Documents -maxdepth 3 -empty -type f -ok rm '{}' ';'

+ 结束符

除了有以 ; 为命令的结束符,之外还有一个 + 结束符。

find ~/Documents -maxdepth 3 -empty -type f -ok ls -lh '{}' +

二者之间的区别是,当以 ; 结尾时,程序的实际执行过程为:

ls -lh file1
ls -lh file2
ls -lh file3
...

也就是对每个搜索结果逐个执行 ls 命令操作,这通常效率不高。而以 + 结尾则对上搜索就结果执行一次 ls 操作。

ls -lh file1 file2 file3 ...

同时还有与 xargs 相结合的方案,不推荐此方法,捎带提一句。

find ~/Documents -maxdepth 3 -empty -type f | xargs -lh
# 等同于
find ~/Documents -maxdepth 3 -empty -type f -ok ls -lh '{}' +

三、与 grep 命令协同工作
搜索 Book.SICP 目录下所有包含关键词‘洞见’的文件,执行以下命令:

find . -type f -exec grep --color -nH --null -e '洞见' {} +

得到结果为:

帮你精通Linux:Find命令高阶操作4项动作

 


帮你精通Linux:Find命令高阶操作4项动作

 

四、逻辑操作

三种逻辑操作在 Find 命令中的选项分别为 -and(a), -or(o), -not

比如我们在上一讲中,提到查询各种类型的文件格式

find ~ -type f,d,l

使用’或‘逻辑将其改写为:

find ~ ( -type f -or -type d -or -type l )

-not 的案例

find ~ ( -type f -not -perms 0600) -or ( -type d -not -perms 0700 )

-and 与逻辑是默认执行动作。

使用逻辑关系的基本表达是为:

expr1 -operator expr2

五、总结

我们以文件的七列属性为蓝本,逐次探讨了Find的八个基本查询功能,以及四个高阶应用,总结如下:

帮你精通Linux:Find命令高阶操作4项动作

find 总结

|----------+----------+----------------------------------------|
|     列号 | 名称     | 方法                                   |
|----------+----------+----------------------------------------|
|        1 | 文件名   | -iname, -ipath, -regex                 |
|----------+----------+----------------------------------------|
|        2 | 时间戳   | -mtime(atime,ctime); -mmin(amin, cmin) |
|----------+----------+----------------------------------------|
|        3 | 文件大小 | -size(b,c,k,M,G)                       |
|----------+----------+----------------------------------------|
|        4 | 用户组   | -group                                 |
|----------+----------+----------------------------------------|
|        5 | 用户     | -user                                  |
|----------+----------+----------------------------------------|
|        6 | inode    | -inum                                  |
|----------+----------+----------------------------------------|
|        7 | 权限     | -type, -perm                           |
|----------+----------+----------------------------------------|
|        8 | 深度     | -mindepth,-maxdepth                   |
|----------+----------+----------------------------------------|
|  Actions | 预定义   | -delete, -ls, -print, -print0          |
|----------+----------+----------------------------------------|
|  Actions | 自定义   | -exec, -ok, xargs                      |
|----------+----------+----------------------------------------|
|  Actions | 协同     | 与 grep 协同                           |
|----------+----------+----------------------------------------|
| Operator | 逻辑操作 | -and, -or, -not                        |
|----------+----------+----------------------------------------  

以上为 Find 查询的全部内容。



Tags:Find命令   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前文中,我们详细阐述了Linux中最复杂的Find命令的基础查询之八列属性:八列属性本文将继续探讨其高级查询功能,将分为四个方面展开讨论: 预定义动作 Predefined-Actions 自定义动...【详细内容】
2021-04-12  Tags: Find命令  点击:(225)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(13)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(21)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(21)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(34)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(26)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(16)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(24)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条