Linux下find与exec的联手干大事

青儿
• 阅读 3620

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

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

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

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

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

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

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

Linux下find与exec的联手干大事

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

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

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

结果如下:

Linux下find与exec的联手干大事

在这里,我们用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 {} \;

执行结果如下:

Linux下find与exec的联手干大事

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

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

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

命令如下:

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

结果如下:

Linux下find与exec的联手干大事

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

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

下:

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

结果如下:

Linux下find与exec的联手干大事

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

Linux下find与exec的联手干大事


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

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

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

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

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

推荐阅读:

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
linux find 命令查找文件和文件夹
查找目录:find/(查找范围)name'查找关键字'typed查找文件:find/(查找范围)name查找关键字print详解:find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
Stella981 Stella981
4年前
Linux的一些很有用的命令或者方法(持续更新)
0.重启(reboot)、关机(shutdown,halt)等,其中立刻关机:立刻关机:shutdownh01\.find命令:很强很重要语法:find\起始目录\寻找条件 操作find/文件名(这样做经常找不到文件,而且还浪费时间。不知道有么有更好的方式。)批量查找文件中的字符串: find|
Wesley13 Wesley13
4年前
linux命令:find命令
http://blog.csdn.net/pipisorry/article/details/39831419(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fblog.csdn.net%2Fpipisorry%2Farticle%2Fdetails%2F39831419)linu
Stella981 Stella981
4年前
Linux Shell 文本处理工具集锦
本文将介绍Linux下使用Shell处理文本时最常用的工具:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk;提供的例子和参数都是最常用和最为实用的;我对shell脚本使用的原则是命令单行书写,尽量不要超过2行;如果有更为复杂的任务需求,还是考虑python吧;find文件查找
Wesley13 Wesley13
4年前
linux查找文件命令find
 每一种操作系统都是由成千上万个不同种类的文件所组成的。其中有系统本身自带的文件,用户自己的文件,还有共享文件等等。我们有时候经常忘记某份文件放在硬盘中的哪个地方。在微软的WINDOWS操作系统中要查找一份文件是相当简单的事情,只要在桌面上点击“开始”-“搜索”中就能按照各种方式在本地硬盘上,局域网络,甚至在INTERNET上查找各种文件,文档。
Stella981 Stella981
4年前
Linux远程ssh设置expect自动填写密码验证
我们需要远程登录服务器,登陆的同时呢执行find命令获取一个时间段内的文件名,并将他们通过rsync下载到本地。因为要跳过已经下载好的目录,scp命令就不够用了,这里用了rsync。因为这里find命令只是获取文件名方便后续下载而已,所以设置find的参数maxdepth1来设置扫描深度,防止遍历子文件夹。同时为了防止根目录也输出,我们设置f
Stella981 Stella981
4年前
Linux命令:find .
\mkdirdoc\find.typedname"doc"execrmrf{}\\; 虽然此处报错,却删除成功\echo$?!(https://static.oschina.net/uploads/space/2018/0102/221713_x80U_3285916
Stella981 Stella981
4年前
Linux中递归更改文件扩展名的命令
比如我需要将jpg结尾的图片文件修改为png结尾的如果能用rename命令,运行下面的find.name'.jpg'execrename.jpg.png{}如果不能用rename命令,使用下面的find.name".jpg"execbashc'mv"$1"
Stella981 Stella981
4年前
Linux find 命令详解
Linux上的 find 命令是 findutil 软件包的一部分,一般已经默认集成在了几乎所有的发行版中。find命令有非常大的灵活性,可以向其指定丰富的搜索条件(如文件权限、属主、属组、文件类型、日期和大小等)来定位系统中的文件和目录。此外,find还支持对搜索到的结果进行多种类型的命令操作。一、简介
Wesley13 Wesley13
4年前
Git 如何拆除核弹起爆码,以及 topgit 0.7到0.8的变迁
转自:http://blog.ossxp.com/2010/01/184/我们使用topgit和git进行公司内部版本控制已经久矣,今天要求大家彻底清除git配置中的push选项。要求使用如下命令,先找到遗留topgit错误配置的git配置文件:$find.maxdepth4name.gittype
胖大海 胖大海
3年前
linux常用的通配符与正则表达式
我们在很多地方都会用到通配符和正则表达式来实现我们的日常操作,提高我们的工作效率。但是很多新伙伴,往往容易将他们弄混。首先我们需要知道通配符和正则表达式的使用场景:通配符也叫文件名替换,它主要是作用于匹配文件名,常用命令是ls、find、cp、mv;正则表达式主要是作用于匹配文件中的字符串或编写脚本,常用命令命令是grep、awk、sed。大家缺乏机器练手的