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

精通,linux,find,命令,高阶,操作,动作 · 浏览次数 : 0

小编点评

**八列属性高级查询功能总结** **1. 预定义动作 Predefined Actions** * 定义了预定义动作,包括 `-delete`、`-ls`、`-print`、`-print0` 和 `-quit` 等。 * 使用 `-print` 和 `-print0` 可以自定义输出格式。 * 使用 `-quit` 可以退出查询并执行后续命令。 **2. 自定义动作 User-defined Actions** * 可自定义执行自定义命令。 * 使用 `-exec` 可以执行命令并传递参数。 * 使用 `-ok` 可以安全地执行命令。 **3. grep协同动作** * 与 `grep` 命令一起使用,可以进行协同搜索。 * 使用 `-nH` 和 `-m` 等选项控制 `grep` 的行为。 * 使用 `+` 后的选项表示将所有匹配结果列出。 **4. 逻辑操作** * `-and`、`-or` 和 `-not` 用于组合查询条件。 * 例如:`find ~ -type f -exec grep --color -nH --null -e '洞见' \\{\\}` 将搜索包含关键词 "洞见" 的所有文件。

正文

帮你精通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 '{}' +

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

  1. ls -lh file1
  2. ls -lh file2
  3. ls -lh file3
  4. ...

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

ls -lh file1 file2 file3 ...

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

  1. find ~/Documents -maxdepth 3 -empty -type f | xargs -lh
  2. # 等同于
  3. 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. |----------+----------+----------------------------------------|
  2. | 列号 | 名称 | 方法 |
  3. |----------+----------+----------------------------------------|
  4. | 1 | 文件名 | -iname, -ipath, -regex |
  5. |----------+----------+----------------------------------------|
  6. | 2 | 时间戳 | -mtime(atime,ctime); -mmin(amin, cmin) |
  7. |----------+----------+----------------------------------------|
  8. | 3 | 文件大小 | -size(b,c,k,M,G) |
  9. |----------+----------+----------------------------------------|
  10. | 4 | 用户组 | -group |
  11. |----------+----------+----------------------------------------|
  12. | 5 | 用户 | -user |
  13. |----------+----------+----------------------------------------|
  14. | 6 | inode | -inum |
  15. |----------+----------+----------------------------------------|
  16. | 7 | 权限 | -type, -perm |
  17. |----------+----------+----------------------------------------|
  18. | 8 | 深度 | -mindepth,-maxdepth |
  19. |----------+----------+----------------------------------------|
  20. | Actions | 预定义 | -delete, -ls, -print, -print0 |
  21. |----------+----------+----------------------------------------|
  22. | Actions | 自定义 | -exec, -ok, xargs |
  23. |----------+----------+----------------------------------------|
  24. | Actions | 协同 | 与 grep 协同 |
  25. |----------+----------+----------------------------------------|
  26. | Operator | 逻辑操作 | -and, -or, -not |
  27. |----------+----------+----------------------------------------

作者:大龙骑士编程

      </div></div></div>
</article>

与[转帖]帮你精通Linux:Find命令高阶操作4项动作相似的内容:

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

八列属性 本文将继续探讨其高级查询功能,将分为四个方面展开讨论: 预定义动作 Predefined-Actions自定义动作 User-defined Actions与grep协同动作Operator逻辑操作 一、预定义动作 Predefined Actions 搜索是第一步,第二步是处理搜索的结果

[转帖]掌握Linux中的12个grep命令

http://blog.itpub.net/70023145/viewspace-2924123/ 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧。 grep是每个Linux发行版都预装的一个强有力的文件模式搜索工具。无论何种原因,如果你的系统

[转帖]Netplan——新一代网络配置工具

https://www.modb.pro/db/156642 Netplan —— 抽象网络配置生成器 ,是一个用于配置 Linux 网络的简单工具。 通过 Netplan ,你只需用一个 YAML 文件描述每个网络接口需要配置成啥样即可。 根据这个配置描述, Netplan 便可帮你生成所有需要的

[转帖]服务器压力过大?CPU打满?我来帮你快速检查Linux服务器性能

https://cloud.tencent.com/developer/article/1879120?areaSource=&traceId= 九条指令查看Linux服务器指令 一、uptime 这个命令可以快速查看机器的负载情况。在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中

[转帖]《Linux性能优化实战》笔记(24)—— 动态追踪 DTrace

使用 perf 对系统内核线程进行分析时,内核线程依然还在正常运行中,所以这种方法也被称为动态追踪技术。动态追踪技术通过探针机制来采集内核或者应用程序的运行信息,从而可以不用修改内核和应用程序的代码就获得丰富的信息,帮你分析、定位想要排查的问题。 以往,在排查和调试性能问题时,我们往往需要先为应用程

[转帖]Netplan——新一代网络配置工具

https://www.jianshu.com/p/174656635e74 Netplan —— 抽象网络配置生成器 ,是一个用于配置 Linux 网络的简单工具。 通过 Netplan ,你只需用一个 YAML 文件描述每个网络接口需要配置成啥样即可。 根据这个配置描述, Netplan 便可帮

[转帖]队列深度对IO性能的影响

https://www.modb.pro/db/43710 几年前一个客户的Oracle数据库经常HANG,老白帮他分析了一下,结论是存储老化,性能不足以支撑现有业务了。正好用户手头有个华为S5600T正好从核心系统中换下来放着没用,就把这个存储换上去了。换了新存储后,系统总体确实有所改善。数据库不

[转帖]队列深度对IO性能的影响

https://www.modb.pro/db/43710 几年前一个客户的Oracle数据库经常HANG,老白帮他分析了一下,结论是存储老化,性能不足以支撑现有业务了。正好用户手头有个华为S5600T正好从核心系统中换下来放着没用,就把这个存储换上去了。换了新存储后,系统总体确实有所改善。数据库不

[转帖]CULinux缘何迅速崛起?原因是一份对信任的精彩回报

https://www.modb.pro/db/611552 “16%的市场占有率为操作系统领域的生态拐点,超过这个份额便可自循环、自发展。”自从欧拉出生以来,如何帮客户创造价值并获得市场的认可一直是头等大事。 就在前不久召开的 2022 年操作系统产业峰会上,我们看到,得益于开源激发出的澎湃动力,

[转帖]pyinstaller实现将python程序打包成exe文件

https://www.cnblogs.com/blogzyq/p/13939739.html 如果我们想要在一个没有python以及很多库环境的电脑上使用我们的小程序该怎么办呢? 我们想到,在Windows平台可以将程序打包成exe可执行文件,而pyinstaller就可以帮我们将程序打包成exe