在 Linux 中查找文件和文件夹
当你在 Bash 命令行上并且需要在指定位置查找特定类型的文件或以某个名称开头的文件夹时,你会怎么做?find
命令可以帮助你找到可能符合广泛标准的文件和文件夹,因此,它是 Linux 中功能强大的命令行实用程序。
本教程将解释在 Bash shell 上下文中使用 find
命令,介绍基本用法、高级用例以及与其他 Bash shell 功能相结合的用法。
Bash 中 find
命令的基本用法
find
命令是一种通用工具,用于查找从普通文件到满足 REGular EXpressions 的多个文件和文件夹的任何内容。最简单的用例,仅在当前目录中查找特定文件或文件夹,可以实现如下。
find filename.ext
find foldername
执行相应命令后,如果文件或文件夹存在,则会打印出它们的名称。
find
命令还可以搜索目录,进入子目录查找指定的文件或文件夹。假设我们有许多名为 test
的文件分散在当前目录的文件夹中。
要查看它们的位置,我们可以键入以下内容。
find . -name test -type f
该代码应返回当前目录和子目录中所有名为 test
的文件的路径。使用参数 -type f
确保我们不会捕获也命名为 test
的目录 - 如果你是程序员,你一定会拥有许多这样的目录。
-name
参数是不言自明的,但如果你希望在搜索指定名称时不区分大小写以捕获诸如 tEST、Test 或 TeST 之类的名称,我们可以使用 -iname
参数代替,其中 i
代表不敏感。
Bash glob 与 find
命令的使用没有严格的关系。如果你可能不知道模式中存在哪些字符或其中有多少个字符,则可以使用位于模式中的星号。
例如,如果你想捕获以下文件:test、test2、test_3、testt1,你可以使用 glob 来捕获这些短语,因为它们都以单词 test 开头。
以下命令执行此操作。
find . -name test*
代码应返回以单词 test 开头的任何文件或目录(注意删除了 -type f
参数)。
Bash 中 find
命令的高级用法
find
命令可以扩展以匹配各种标准。如果你想基于多个 glob 或名称捕获文件,你可能需要考虑使用 -o
或 OR 函数。
例如,如果你想在一个目录中同时查找 PDF 和 Word DOC/DOCX 文件,你可以通过以下方式进行。
find -iname '*.pdf' -o -iname '*.doc' -o -iname '*.docx'
捕获扩展名已设置为大写的文件的不敏感名称参数可能是某些程序的情况。
如果你更熟悉 RegEx,你也可以使用模式来指定多个条件,使用 -regex
或 -iregex
参数。
要捕获与上述相同的扩展名,并另外查找以 test 开头的文件,我们可以使用以下模式:
find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f
对特殊的正则表达式字符(如括号和管道符号)使用反斜杠会阻止 Bash 处理它们并将整个字符串直接传递给 find
命令以防止我们的正则表达式失败。
最后,一些关于如何使用 find
命令输出的讨论 - 你可以通过管道输入 wc
来计算匹配文件和文件夹的出现次数,这是一个字符/单词/行计数实用程序。
find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f | wc -l
你可以将数据保存到一个变量中,以便稍后在脚本中由命令解析。
DOCS=$(find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f)
请记住,文件路径中可能存在特殊字符,包括空格、换行符和括号,从而在将此类变量传递给命令时导致奇怪的行为。确保在处理此类数据时相应地设置 IFS 分隔符。
find
命令还提供类似于 xargs
操作的逐项命令执行。你可以使用 -exec
参数来实现此目的。
例如,如果你想获得匹配的所有文件和文件夹的权限,可以执行以下操作:
find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f -exec ls -l {} \;
相关文章
如何在 CentOS 中获取 IP 地址
发布时间:2023/05/04 浏览次数:108 分类:操作系统
-
这篇简短的文章是对 CentOS 的一个简短介绍,然后简要讨论了我们如何使用命令行界面 (CLI) 在 CentOS 中获取服务器 IP 地址。
在 Linux 中更新 YUM
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。
在 Linux 中安装 Deb 文件
发布时间:2023/05/04 浏览次数:130 分类:操作系统
-
本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。
Linux 中的 lsof 命令
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。
Linux 解决不能执行二进制文件问题
发布时间:2023/05/04 浏览次数:187 分类:操作系统
-
在本文中,我们将学习如何在 Linux 中执行二进制文件。 如果 Linux 无法执行二进制文件,我们还将学习如何解决错误。
Linux 中错误 Mesg: Ttyname Failed: Inappropriate Ioctl for Device Error
发布时间:2023/05/04 浏览次数:145 分类:操作系统
-
本文介绍如何在 Linux 中解决 mesg: ttyname failed: inappropriate ioctl for device 错误。在 Linux 中,这个错误是由于默认的 vagrant 配置 config.ssh.shell 与 bash -l 交互导致的。
Linux 中的 ps aux 命令
发布时间:2023/05/04 浏览次数:69 分类:操作系统
-
本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。
Linux 中的 NTP
发布时间:2023/05/04 浏览次数:137 分类:操作系统
-
本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。
在 Bash 中创建进度条
发布时间:2023/05/04 浏览次数:164 分类:操作系统
-
这是有关在 Bash 中创建进度条以显示正在运行的命令或进程的进度的指南。本文将探讨在 Bash(Linux 和 macOS 的默认 shell)中向 shell 脚本添加进度条的几种方法。使用 pv 命令在 Bash 中创建进度条