乐趣区

关于linux: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,公众内回复 1024 可收费取得 5T 技术材料,包含:Linux,C/C++,Python,树莓派,嵌入式,Java,人工智能 ,等等。公众号内回复 进群,邀请您进高手如云技术交换群。


最初,最近很多小伙伴找我要Linux 学习路线图,于是我依据本人的教训,利用业余时间熬夜肝了一个月,整顿了一份电子书。无论你是面试还是自我晋升,置信都会对你有帮忙!

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

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

也心愿有小伙伴能退出我,把这份电子书做得更完满!

有播种?心愿老铁们来个三连击,给更多的人看到这篇文章

举荐浏览:

  • 干货 | 程序员进阶架构师必备资源免费送
  • 神器 | 反对搜寻的资源网站
退出移动版