Linux 上的 Find -Exec 命令Linux 上的 Find -Exec 命令Linux 上的 Find -Exec 命令Linux 上的 Find -Exec 命令
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

Linux 上的 Find -Exec 命令

您的 Linux 系统由数千个文件组成。手动搜索它们很麻烦。在这种情况下,Linux 系统提供两个不同的命令来查找特定文件:locate 命令和 find 命令。当您想要指定文件属性并微调文件搜索时,find 命令尤其是一个很棒的工具。使用 find 命令,您甚至可以使用 exec 参数对找到的文件进行操作。在本教程中,我们将讨论 find -exec 命令。

查找命令

find 命令比locate 命令慢,但它实时搜索整个文件系统!此外,使用 find 命令,您可以使用大量属性来微调搜索。这在英语中意味着您可以使用几乎任何您想要的参数来微调您的搜索。例如,您可以使用文件名、文件大小、文件权限、文件修改时间等来搜索文件。基本上,这是一个非常有用的命令!

find命令的基本格式如下:

find [place to search] <options>

前任 :

find / -name secret.txt

这里,/代表搜索我们想要的文件的地方,我们要求它搜索名为secret.txt的文件。

寻找执行官

find 命令的最佳功能是它的 exec 参数,它允许 Linux 用户对找到的文件执行任何命令。换句话说,可以对找到的文件执行操作。

find -exec 命令将采用以下格式:

find [path] [arguments] -exec [command] [placeholder] [delimiter]

在使用 exec 参数之前,我们必须了解一些事情:

  1. {} 称为占位符。该占位符将保存 find 找到的结果。

因此,如果我们正在寻找一个名为 Secret.txt 的文件,那么我们会这样写:

find / -name secret.txt

当我想执行命令时,这会在我的系统上找到一大堆文件。我们不会写出找到的文件的名称,而是用占位符 {} 替换它。

例如,

find / -name ‘secret.txt’ 2> /dev/null -exec cat {} \;

注意:在这种情况下,我还要指出 2> /dev/null 的作用。 2 代表标准错误,我们要忽略它。因此我们将其发送到/dev/null。从本质上讲,我们正在采取错误并扔掉它们。

现在,让我们忽略 \;部分并集中于占位符。为什么我们在单词“cat”后面添加 {}?好吧,它会找到我正在寻找的文件,然后当它找到它时,它会将文件传递给 exec 参数,如下所示:

-exec cat {} \;

或者

-exec cat /home/kalyani/secret.txt \;

所以,它是 find 命令丢弃的结果的占位符!

  1. \;是一个分隔符。

\;是一个分隔符。这个特定的分隔符是 find 参数的结束方式。当它以这种方式结束时,将对它找到的每个结果采取行动。

例如,我创建了三个secret.txt文件:secret.txt、secret2.txt和secret3.txt。

现在,我将发出以下命令:

find / -name ‘secret*.txt’ 2> /dev/null -exec cat {} \;

从图中可以看到,它找到了这三个文件,并把它们的内容一一列出来。那么,\; 是做什么用的?做?嗯,它确保对每个文件执行操作。在本例中,我们有三个文件。 cat 命令首先应用于第一个结果:secret2.txt。然后,将其应用于第二个结果:secret3.txt。最后,将其应用于第三个结果:secret.txt。

在这里,当您使用 -exec cat {} \;参数,它执行以下操作:

cat secret2.txt;

cat secret3.txt;

cat secret.txt;
  1. \+ 是另一个分隔符。

这是另一种类型的分隔符。如果使用此功能,则会对发现的结果采取行动。

例如:

find / -name ‘secret*.txt’ 2> /dev/null -exec ls {} \+

下图将向您展示 \; 之间的区别和\+:

在这里,当您使用 -exec ls {} \;参数,它执行以下操作:

ls secret2.txt;

ls secret3.txt;

ls secret.txt;

而 -exec {} \+ 参数执行以下内容:

ls secret2.txt secret3.txt secret.txt;

多名执行官

现在,多个 -exec 参数也可以传递给命令。

一般格式如下:

find [path] [arguments] -exec [command_1] [placeholder] [delimiter] -exec [command_2] [placeholder] [delimiter]…-exec [command_N] [placeholder] [delimiter]

例如:

find / -name ‘secret*.txt’ 2> /dev/null -exec ls {} \; -exec cat {} \;

在这里,如您所见,它获取第一个结果并将其传递给第一个命令。然后,它通过第二个命令传递它,然后转到第二个结果。

本质上,结果传递如下:

ls secret2.txt; cat secret2.txt;

ls secret3.txt; cat secret3.txt;

ls secret.txt; cat secret.txt;

另一个例子:

find / -name ‘secret*.txt’ 2> /dev/null -exec ls {} \+ -exec cat {} \+

在这种情况下,结果传递如下:

ls secret2.txt secret3.txt secret.txt; cat secret2.txt secret3.txt secret.txt;

结论

Linux 是一个拥有无数文件的奇妙系统。然而,它只提供了两个不同的命令来在大海捞针中搜索我们的针。这两个命令中最好的一个是 find 命令。 find 命令搜索整个文件系统,因此需要一段时间。此外,它可以对发现的结果采取行动。这意味着您可以对找到的文件应用各种命令。如果你想移动它们,如果你想删除它们,甚至对 find 命令的结果做一些疯狂的事情,你可以;你的知识是极限。因此,下次需要对文件执行某些操作时,您可以使用 find -exec 命令来完成!我们希望您觉得这篇文章有帮助。查看其他 Linux 提示文章以获取更多提示和信息。

©2015-2025 艾丽卡 support@alaica.com