在Linux下工作,find命令绝对是一个非常高频的命令。我们可以用find命令来找到符合某些关键词的文件,找到某些日期的文件,也可以设定一些正则表达式,找到一系列满足该条件的文件。

但是,如果只有一个find命令的话,我们仅能将文件找出来,列在终端里。仅一个find命令还不足以再做进一步的操作。

比如说,我们想把项目文件夹里的中间文件(*.o文件)找出来,再把它们全部删除;再如,我们想把日志文件夹下3天以上的日志全部转移到指定文件夹下;等等诸如此类的需求,还有非常多。

像这样的,我们想用find命令找到相关文件,再作进一步操作,该如何进行呢?这时候exec命令就派上用场。

我们先来看看exec的基本用法。

-exec参数后面跟的就是我们想进一步操作的命令,比如rm,mv等等。exec是以分号";"作为结束标识符的,考虑到各个系统平台对分号的不同解释,我们在分号前再加个反斜杠,便于移植。而在分号前,通常也会有一对花括号{},代表前面find命令查找出来的文件各。

我们直接通过几个实例来讲解find与exec联合用法。为了演示的方便,我们假定有如下的一个项目文件夹:

实例1:使用find命令查找相关文件后,再使用ls命令将它们的详细信息列出来

我们现在想把当前目录下所有的.o文件全部找出来,并用 ls -l 命令将它们列出来。实现这个需求的命令如下:

find . -name "*.o" -type f -exec ls -l {} \;

结果如下:

在这里,我们用find 命令匹配到了当前目录下的所有.o文件,并在 -exec 选项中使用 ls -l 命令将它们的详细信息列出来。

实例2:使用find命令查找相关文件后,再使用rm命令将它们删除

我们现在想把当前目录下所有的.o文件全部找出来,并用rm命令将它们删除。实现这个需求的命令如下:

find . -name "*.o" -exec rm {} \;

执行完这个命令后,该目录下所有的.o文件都被删除。由于这个动作完成后也不会有任何提示,所以就没有截图的必要了。

实例3:使用-exec选项的安全模式,将对每个匹配到的文件进行操作之前提示用户

在实例2中,我们匹配到文件后就立刻执行rm命令,这样操作有些危险,因为如果一旦误操作,有可能会引起灾难性的后果。

exec的安全模式就是为了避免这个问题而产生。它会在匹配到某个文件后,在进行操作之前会先问一下你,经过你的确认它才会进行相应操作。

同样的实例2的需求,如果采用安全模式的话,命令是这样的:

find . -name "*.o" -ok rm {} \;

执行结果如下:

实例4:搜索匹配到的文件中的关键内容

假如我现在有个很大型的项目(如Linux内核),我想在里面搜索一个含有某关键字的文件。我们可以使用grep命令检索所有的文件。这样做肯定是可以的,但如果项目很大的话,这样太耗时了,效率太低。

我们可以先用find命令找到所以相关文件,然后再用grep命令检索那些文件即可。因为已经使用find过滤一遍了,所以这样操作会节约很多时间,提高效率。

命令如下:

find . -name "*.h" -exec grep -rns "hello" {} \;

结果如下:

实例5:查找文件并移动到指定目录

这个需求就比较简单了。比如我现在想把所有的.o文件找出来,然后新他们mv到buil目录。命令如

下:

find . -name "*.o" -exec cp {} build \;

结果如下:

更多精彩内容,请关注公众号良许Linux,公众内回复1024可免费获得5T技术资料,包括:Linux,C/C++,Python,树莓派,嵌入式,Java,人工智能,等等。公众号内回复进群,邀请您进高手如云技术交流群。

最后,最近很多小伙伴找我要Linux学习路线图,于是我根据自己的经验,利用业余时间熬夜肝了一个月,整理了一份电子书。无论你是面试还是自我提升,相信都会对你有帮助!目录如下:

免费送给大家,只求大家金指给我点个赞!

电子书 | Linux开发学习路线图

也希望有小伙伴能加入我,把这份电子书做得更完美!

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

  • 干货 | 程序员进阶架构师必备资源免费送
  • 神器 | 支持搜索的资源网站

Linux下find与exec的联手干大事相关推荐

  1. Linux 下shell中exec解析

    exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息.        bash shel ...

  2. Linux下进程的建立 并附Linux exec函数族

    我们都知道,进程就是正在执行的程序.而在Linux中,可以使用一个进程来创建另外一个进程.这样的话,Linux的进程的组织结构其实有点像Linux目录树,是个层次结构的,可以使用pstree命令来查看 ...

  3. Linux下使用exec命令将文件与文件描述符关联

    在shell脚本下exec为系统自带的脚本命令,其作用是用来执行其他程序: 语法格式: exec (选项)(参数) 选项: -c:在当前环境下执行命令,即在当前shell脚本下执行,而不是打开一个新的 ...

  4. Linux下的exec函数族

    引入   创建子进程后,我们并不希望子进程执行父进程后续相同的内容,这时我们可以用exec函数族进行子进程的执行内容替换. exec函数族 Linux下的exec函数族,是指6个以exec开头的函数. ...

  5. linux下的mnt文件夹用来干嘛,Linux/mnt目录主要用于什么?

    linux下mnt目录的作用:mount 可直接理解为"挂载"挂接光驱.USB设备的目录,加载后,会在mnt里多出相应设备的目录.linux系统根目录下各个目录用途说明: 1./ ...

  6. linux下perl命令行参数,Perl One-Liners | Perl命令行学习1 -e参数

    注:本内容需要点的perl编程基础,最好是读过<perl语言入门>. 本系列是自己平常学习工作中的总结,每一个实例均为我为了讲解而设置的,自己试过的,如有错误,望能见谅 Perl 命令行参 ...

  7. linux下makefile

    概述 -- 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都 为你做了这个工作,但我觉得要作一个好的和 professional的程序员,mak ...

  8. linux下gdb单步调试

    用 GDB调试程序 GDB 概述 ---- GDB 是 GNU开源组织发布的一个强大的 UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像 VC. BCB等 IDE的调试,但如果你是在 ...

  9. linux下Makefile学习--注释很好

    什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都 为你做了这个工作,但我觉得要作一个好的和 professional的程序员,makefile还 ...

最新文章

  1. Delphi存取图像完整解决方案
  2. 了解DSP的体系结构
  3. JavaScript中的一些特殊用法(一)
  4. Java-java.io.BufferedInputStream
  5. ssas 分区 设置_分区SSAS多维数据集的好处
  6. Solidity常见问题
  7. Thinkpad SL-400 XP驱动下载与安装方法
  8. 社会工程学之《反欺骗的艺术》的思考
  9. 我的世界java启动失败_我的世界游戏启动失败怎么办 PC版游戏崩溃解决办法
  10. ArcCatalog基础操作
  11. 搞不动了,持安零信任真的安全
  12. 云计算与大数据技术应用 第二章
  13. 2022清明节放假安排来了,制定假日计划可用云便签软件
  14. 集成学习方法之Bagging,Boosting,Stacking
  15. matlab 信道容量的迭代算法,实验二一般信道容量迭代算法详解.ppt
  16. 逆袭大厂生存指南-1 初出茅庐
  17. 微信公众号可以关联多少个小程序?
  18. Fifo中Underflow信号的含义
  19. 人工智能技术概述与入门
  20. SVN管理工具Cornerstone之:创建分支、提交合并

热门文章

  1. Linux常用监控命令
  2. 啊哦,软著申请,收到了补正通知
  3. 利用四位加法器实现8421BCD运算补正
  4. Android 外接基于UVC协议的摄像头并实现预览
  5. linux vbox vmware 镜像高速下载地址
  6. 迅为RK3399开发板支持在Ubuntu系统下安装Docker
  7. SMM学习22:MyBatis配置文件起别名typeAliases
  8. Paper笔记: 《Towards Evaluating the Robustness of Neural Networks》(CW攻击)
  9. Cake PHP framework
  10. 【网络编程】Socket套接字;UDP数据报套接字编程;TCP流套接字编程