在Linux下工作,find命令绝对是一个使用频率非常高的命令。我们可以使用find命令来查找匹配某些关键字的文件,查找具有特定日期的文件,或者设置一些正则表达式来查找一系列满足条件的文件。但是,如果只有一个find命令,我们只能找到文件并在终端列出。只有一个查找命令不足以进行进一步的操作。比如我们要找出工程文件夹中的中间文件(*.o文件),然后全部删除;再比如,我们要将日志文件夹中超过3天的所有日志都转移到指定的文件夹中;等等,还有很多。像这样,我们想用find命令找到相关的文件,然后做进一步的操作,如何进行呢?这时候exec命令就派上用场了。我们先来看看exec的基本用法。-exec参数后面是我们要进一步操作的命令,比如rm、mv等。exec使用分号“;”作为结束标识符。考虑到各个系统平台对分号的解释不同,我们在分号前加一个反斜杠,方便移植。分号前通常有一对花括号{},代表前面find命令找到的文件。我们直接通过几个例子来说明find和exec的结合使用。为了演示方便,我们假设有一个工程文件夹如下:例1:使用find命令查找相关文件,然后使用ls命令列出其详细信息现在我们要列出所有.o文件在当前目录中找到它们,并用ls-l命令列出它们。实现这个需求的命令如下:find.-name"*.o"-typef-execls-l{}\;结果如下:这里我们使用find命令匹配当前目录下的所有.o文件,输入-exec选项中使用ls-l命令列出它们的详细信息。例2:用find命令找到相关文件,然后用rm命令删除我们现在要找到当前目录下的所有.o文件,用rm命令删除。实现这个需求的命令如下:find.-name"*.o"-execrm{}\;执行该命令后,该目录下的所有.o文件将被删除。由于这个动作完成后不会有提示,所以就不用截图了。示例3:使用-exec选项的安全模式将在操作每个匹配的文件之前提示用户。在示例2中,我们将匹配文件后立即执行rm命令。这个操作有点危险,因为如果你误用它,可能会产生灾难性的后果。exec的安全模式就是为了避免这个问题而产生的。它匹配到某个文件后,在执行操作前会询问你,你确认后才执行相应的操作。同例2的需求,如果使用安全模式,命令如下:find.-name"*.o"-okrm{}\;执行结果如下:例4:如果我现在有一个很大的项目(比如linux内核),我想在匹配的文件中搜索关键内容,我想搜索包含某个关键字的文件。我们可以使用grep命令检索所有文件。这样做是肯定可以的,但是如果工程量大的话,太费时,效率低。我们可以先使用find命令查找所有相关文件,然后使用grep命令检索这些文件。因为find已经用过一次过滤,这个操作会节省很多时间,提高效率。命令如下:find.-name"*.h"-execgrep-rns"hello"{}\;结果如下:例5:找到文件并移动到指定目录。这个要求比较简单。例如,我现在想找出所有.o文件,然后将它们新建mv到buil目录。命令如下:find.-name"*.o"-execcp{}build\;结果如下:本文经授权转载自公众号《良序Linux》。世界500强外企Linux开发工程师梁旭,在公众号分享大量Linux干货,欢迎关注!
