在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下find与exec的联手干大事的更多相关文章

  1. 【转】Linux下Fork与Exec使用

    Linux下Fork与Exec使用 转自 Linux下Fork与Exec使用 一.引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值.for ...

  2. Linux下Fork与Exec使用

    Linux下Fork与Exec使用   一.引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值.fork函数是Unix系统最杰出的成就之一, ...

  3. Linux 下shell中exec解析

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

  4. Linux下Fork与Exec

    一.引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值.fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期 ...

  5. linux下使用fork,exec,waitpid模拟system函数

    代码如下: #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include &l ...

  6. Linux 下Shell的学习

    1.Shell学习 1.什么是Shell    shell是一个命令解析器,在操作系统的最外层,负责和用户对话,将用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果.2.什么是shell脚本 ...

  7. Linux下多进程编程之exec函数语法及使用实例

    exec函数族 1)exec函数族说明 fork()函数用于创建一个子进程,该子进程几乎复制了父进程的全部内容,但是,这个新创建的进程如何执行呢?exec函数族就提供了一个在进程中启动另一个程序执行的 ...

  8. Linux下fork()、vfork()、clone()和exec()的区别

    转自Linux下fork().vfork().clone()和exec()的区别 前三个和最后一个是两个类型.前三个主要是Linux用来创建新的进程(线程)而设计的,exec()系列函数则是用来用指定 ...

  9. linux下shell脚本执行方法及exec和source命令

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

随机推荐

  1. Newbe.Claptrap 框架如何实现在多种框架之上运行?

    Newbe.Claptrap 框架如何实现在多种框架之上运行?最近整理了一下项目的术语表.今天就谈谈什么是 Claptrap Box. 特别感谢 kotone 为本文提供的校对建议! Newbe.Cl ...

  2. 微信DLL劫持反弹shell复现

    (该文参考网络他人资料,仅为学习,不许用于非法用途) 一.操作环境 Windows7 :  微信  , Process Explorer(任务管理工具,本实验中用于查找微信程序调用的DLL文件) Ka ...

  3. linux 安装sftp

    1.定义sftp的数据目录 mkdir -p /data/sftp 2.将目录归到root用户,否则无法chroot chown root. -R /data/sftp/或者chown root:ro ...

  4. 关于make及makefile的工作笔记

    之前一直是用java的,最近工作中需要在Linux中写一个C++程序,之前的写法很不规范,只有一个CPP.记录一下关于makefile的相关知识 想要完整的了解相关内容,推荐看这本书<程序员的自 ...

  5. Asp.net Core 3.1 引用ORM工具包 yrjw.ORM.Chimp(EF + dapper + Autofac)使用教程

    yrjw.ORM.Chimp 介绍 It is not the encapsulation of ORM,a based on EF + dapper + Autofac, is repository ...

  6. oracle修改用户密码操作

    打开命令提示框输入以下内容: 1.输入:sqlplus /nolog //进入oralce控制台2.输入:conn /as sysdba //以管理员权限登录3.输入:alter user apps ...

  7. max user processes 导致的服务器大量close_wait问题解决过程

    1.背景: 由于现网业务量增长过快,需要扩容应用程序服务器,分担来自前端的访问压力. 2.故障: 部署好业务启动程序后,发现程序运行一小会后不产生新的日志和数据. 3.查问题过程: 1.首先查看程序运 ...

  8. Tmux安装和使用

    1.What's tmux tmux 是一个终端复用器: 可以激活多个终端或窗口, 在每个终端都可以单独访问,每一个终端都可以访问,运行和控制各自的程序.tmux类似于screen,可以关闭窗口将程序 ...

  9. 关于Junit4 和 Junit5.4

    1.    Junit5.4 主要是用于Maven框架 , 对普通类的测试是不可以的. 如这个, junit4可以, junit5.4不可以. 2. Junit不可以使用 static 静态方法. 关 ...

  10. 使用Apache的反向代理会影响搜索引擎的收录和排名吗

    http://www.wocaoseo.com/thread-292-1-1.html 百度官方观点:Baiduspider对站点的抓取方式和普通用户访问一样,只要普通用户能访问到的内容,我们就能抓取 ...