Linux下find与exec如何结合使用

66次阅读
没有评论

共计 1625 个字符,预计需要花费 5 分钟才能阅读完成。

这篇文章主要为大家展示了“Linux 下 find 与 exec 如何结合使用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“Linux 下 find 与 exec 如何结合使用”这篇文章吧。

在 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 下 find 与 exec 如何结合使用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计1625字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)