0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

find exec命令实例教程

CHANBAEK 来源:myfreax 作者:myfreax 2022-12-06 17:08 次阅读

Linux find命令是根据指定条件搜索文件和目录的绝佳工具。exec允许您对找到的文件执行指定操作。

例如你要使用find命令找到所有以.jpeg作为扩展名的文件,然后用.jpg扩展名重命名文件。

此时你两种方法可以对find命令的结果执行指定的操作。第一种是使用xargs命令,第二种是exec命令。

我们已经编写过有一篇xargs命令详解的文章。本教程将重点详解组合find exec命令的用法。

您不能只是通过管道将find命令输出重定向到另一个命令。它不会那么简单

在开始本教程之前,请运行touch命令touch file1.txt file2.txt file3.txt创建教程需要使用的文件。

touch file1.txt file2.txt file3.txt

find exec 命令实例教程

find命令和exec命令组合使用的基本语法是find [path] [arguments] -exec [command] {} \\;

[command]是您要对find命令的结果执行的操作。{}是一个占位符,用于保存find命令的搜索结果。

\\;表示[command]命令的结束。在这里你需要转义;避免shell的解释,因此会写成这样\\;

还有另一种语法与上述略有不同,这是它的语法形式find [path] [arguments] -exec [command] {} +

+表示对于find命令搜索结果,运行一次[command]。所有结果都作为参数一起传递给[command]

你仍然对{} \\;{} +的使用感到困惑,你可以尝试跟着我们的实例进行操作。

find . -type f -exec ls {} ;命令将会对搜索每一个搜索结果运行ls命令,类似于运行3次ls命令,但每次参数都是不同的文件。

find . -type f  -exec ls  {} \\;
#eq
ls file1.txt
ls file2.txt
ls file3.txt

如果你使用的是{} +。也就是将find命令的搜索结果一次传递给exec指定的命令[command]。例如命令find . -type f -exec ls {} ;

{} \\;运行多次同一个命令相比,使用{} +是更好的选择,因为性能更好。但在某些情况你不能这样做。

如果find命令搜索结果有50个,则不能将搜索结果作为参数一次传递给命令,因为Linux对最大命令行长度有限制。

find . -type f  -exec ls  {} ;
#eq
ls file1.txt file2.txt file3.txt

find exec 命令搜索重命名文件扩展

使用find exec命令可让你以轻松重命名文件。在组合使用find exec命令还需要使用mv。mv 命令是用于移动文件或者重命名文件。

以下命令将会修改当前目录的所有*.txt文件扩展名为.js-exec运行sh命令启动子shell进程。

sh -c 'mv "$1" "${1%.txt}.edefg"'子shell进程运行命令mv "$1" "${1%.txt}.js"${1%.txt}.js参数将会匹配原始文件扩展名的txt并替换为js

find . -type f -name '*.txt' -exec sh -c 'mv "$1" "${1%.txt}.js"' _ {} \\;

find exec 命令删除文件

自动删除文件时请格外小心。如果不注意,可能会是灾难性的。要么使用交互式删除命令rm -i,要么先打印查看find命令搜索的结果。

find exec命令组合的另一个常见示例是搜索大于指定大小的文件并将其删除。如果您正在清理日志,这很有效。

例如删除大于100 MB的文件,或者根据文件的修改时间删除文件。在这里,我们使用-mtime选项搜索过去10小时修改的文件并删除。

find ~/Desktop -size +100M -exec rm {} \\;
sudo find /tmp/ -type f -mtime +10 -exec rm {} \\;

Find exec grep 命令搜索文件内容

find命令仅对文件属性进行搜索。而grep命令可用于文件的内容。将Find exec和grep组合起来,您就得到一个强大的命令行搜索工具。

例如命令find . -type f -name "*.js" -exec grep -H keyword {} ;搜索当前目录的所有js文件,然后使用grep命令搜索关键词keyword

这里之所以使用grep命令的-H选项,是因为grep默认不打印匹配搜索模式的文件名。-H选项将会打印匹配的文件名和匹配的内容并使用:分隔。

find . -type f -name "*.js" -exec grep -iH a {} \\;

Find 命令与多个exec

是的,您可以将Find命令的搜索结果链接多个exec命令。多个exec命令并不是共享find命令的搜索结果。

而是第一个exec命令的结果再传递下一个exec命令。例如以下命令它将首先搜索.hbs文件。然后第一个exec命令的标准输出传递到第二个exec命令。

Find是很强大的命令,用于根据多个条件搜索文件。exec命令使您能够处理find命令的结果。

find . -type f -name "*js" -exec ls {} \\; -exec grep -H keyword {} \\;

find exec 命令修改文件目录权限所有权

修改文件和目录的所有权是组合Find exec命令另一个例子。以下命令,搜索myfreax用户拥有的文件,然后将其所有权更改为myfreax.com

如果你学会更改文件的所有权,自然你很容易就会使用find exec命令修改文件目录权限,-type f是文件,-type d是目录。

在这里分享的例子只是简单的示例。find exec命令组合一起为您提供了在Linux命令行中执行操作的无限可能。

sudo find /home/myfreax/disk/Downloads -user myfreax -type f -exec chown myfreax.com {} \\;

sudo find /home/myfreax/disk/Downloads -type f -exec chmod 644 {} \\;
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206735
  • Find
    +关注

    关注

    0

    文章

    52

    浏览量

    11554
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21849
收藏 人收藏

    评论

    相关推荐

    Protel ***典型实例教程

    Protel ***典型实例教程
    发表于 10-29 23:58

    Protel ***典型实例教程

    Protel ***典型实例教程Protel ***典型实例教程
    发表于 04-24 02:02

    Keil实例教程

    Keil实例教程(一)
    发表于 11-07 10:13

    [转]find命令结合exec和xargs使用的区别

    使用的区别:使用-exec选项命令操作示例及结果如下:[code][root@oldboy ~]# find . -type f -exec echo oldboyedu { } \
    发表于 09-03 15:26

    labview入门实例教程

    非常基础的labview入门实例教程
    发表于 01-07 09:51

    Keil实例教程1-5章

    Keil实例教程1-5章
    发表于 03-10 13:26 166次下载

    Protel DXP 实例教程详解

    Protel DXP 实例教程详解Protel DXP 实例教程详解下载介绍:Protel DXP 多媒体实例教程详解
    发表于 03-12 02:12 0次下载

    adams实例教程下载

    adams实例教程:
    发表于 04-10 12:44 0次下载
    adams<b class='flag-5'>实例教程</b>下载

    spring实例教程下载

    spring实例教程下载
    发表于 09-11 11:30 109次下载
    spring<b class='flag-5'>实例教程</b>下载

    基于Keil的入门实例教程

    基于Keil的入门实例教程: 1 Keil工程文件的建立、设置与目标文件的获得3 Keil 程序调试窗口2 Keil的调试命令、在线汇编与断点设置4 Keil 的辅助工具和部份高级技巧
    发表于 08-10 08:36 355次下载

    Mathcad软件实例教程

    Mathcad软件实例教程 PPT格式
    发表于 05-04 17:20 0次下载

    CAXA数控车实例教程

    CAXA数控车实例教程
    发表于 10-11 16:06 451次下载
    CAXA数控车<b class='flag-5'>实例教程</b>

    单片机开发技术实例教程

    单片机开发技术实例教程说明。
    发表于 03-30 09:41 41次下载
    单片机开发技术<b class='flag-5'>实例教程</b>

    SolidWorks 2016集成与实例教程下载

    SolidWorks 2016集成与实例教程下载
    发表于 05-27 11:04 16次下载

    docker exec命令的使用方法

    Docker是一种开源的容器化平台,可以让开发人员在容器中打包和运行应用程序。它提供了一种快速、可靠和一致的方式来构建、部署和运行应用程序。Docker exec命令是Docker提供的一个非常
    的头像 发表于 11-23 09:33 748次阅读