Linux中的Find命令(查找文件和目录)

2023-11-15

The find命令是 Linux 系统管理员工具库中最强大的工具之一。它根据用户给定的表达式在目录层次结构中搜索文件和目录,并可以对每个匹配的文件执行用户指定的操作。

您可以使用find命令根据文件和目录的权限、类型、日期、所有权、大小等搜索文件和目录。它还可以与其他工具结合使用,例如grep or sed .

find命令语法#

的一般语法为find命令如下:

find [options] [path...] [expression]
  • The options属性控制符号链接的处理、调试选项和优化方法。
  • The path...属性定义 find 将搜索文件的起始目录或目录。
  • The expression属性由由运算符分隔的选项、搜索模式和操作组成。

要搜索目录中的文件,用户调用find命令需要对该目录具有读取权限。

让我们看一下下面的例子:

find -L /var/www -name "*.js"
  • 选项-L(选项)告诉find命令来跟踪符号链接。
  • The /var/www(path...) 指定要搜索的目录。
  • 表达方式)-name "*.js tells find搜索以以下结尾的文件.js(JavaScript 文件)。

按名称查找文件#

按名称查找文件可能是最常见的用途find命令。要按文件名查找文件,请使用-name选项后跟您要搜索的文件的名称。

例如,要搜索名为的文件document.pdf in the /home/linuxize目录,您将使用以下命令:

find /home/linuxize -type f -name document.pdf

要运行不区分大小写的搜索,请更改-name选项与-iname:

find /home/linuxize -type f -iname document.pdf

上面的命令将匹配“Document.pdf”、“DOCUMENT.pdf”等。

按扩展名查找文件#

按扩展名搜索文件与按名称搜索文件相同。例如,要查找以以下结尾的所有文件.log.gz在 - 的里面/var/log/nginx目录,您可以输入:

find /var/log/nginx -type f -name '*.log.gz'

值得一提的是,您必须引用模式或转义星号*带反斜杠的符号\这样当您使用通配符时,它就不会被 shell 解释。

查找与正则表达式不匹配的所有文件*.log.gz你可以使用-not选项。例如,要查找所有不以以下结尾的文件*.log.gz你会使用:

find /var/log/nginx -type f -not -name '*.log.gz'

按类型查找文件#

有时您可能需要搜索特定文件类型,例如常规文件、目录或符号链接。在Linux中,一切都是文件。

要根据文件类型搜索文件,请使用-type选项和以下描述符之一来指定文件类型:

  • f: 普通文件
  • d: 目录
  • l: 符号链接
  • c: 字符设备
  • b:块设备
  • p:命名管道(先进先出)
  • s: socket

例如,要查找以下目录中的所有目录当前工作目录,你会使用:

find . -type d

常见的示例是递归地将网站文件权限更改为644和目录权限755使用chmod命令:

find /var/www/my_website -type d -exec chmod 0755 {} \;find /var/www/my_website -type f -exec chmod 0644 {} \;

按大小查找文件#

要根据文件大小查找文件,请传递-size参数以及尺寸标准。您可以使用以下后缀来指定文件大小:

  • b:512 字节块(默认)
  • c: bytes
  • w: 两字节字
  • k:千字节
  • M:兆字节
  • G:千兆字节

以下命令将精确查找所有文件1024内的字节数/tmp目录:

find /tmp -type f -size 1024c

The find命令还允许您搜索更大的文件或小于指定尺寸。

在下面的示例中,我们搜索所有小于1MB在当前工作目录内。注意减号-尺寸值之前的符号:

find . -type f -size -1M

如果要搜索大小大于的文件1MB,那么你需要使用加号+ symbol:

find . -type f -size +1M

您甚至可以搜索某个大小范围内的文件。以下命令将查找之间的所有文件1 and 2MB:

find . -type f -size +1M -size 21M

按修改日期查找文件#

The find命令还可以根据文件的上次修改、访问或更改时间来搜索文件。

与按大小搜索时相同,使用加号和减号表示“大于”或“小于”。

假设几天前,您修改了一个 dovecot 配置文件,但您忘记了是哪一个。您可以轻松过滤该目录下的所有文件/etc/dovecot/conf.d以结尾的目录.conf并在最近五天内进行了修改:

find /etc/dovecot/conf.d -name "*.conf" -mtime 5

这是根据修改日期过滤文件的另一个示例,使用-daystart选项。下面的命令将列出目录中的所有文件/home修改过的目录30或多天前:

find /home -mtime +30 -daystart

按权限查找文件#

The -perm选项允许您根据文件权限搜索文件。

例如,要查找具有完全权限的所有文件775在 - 的里面/var/www/html目录,您将使用:

find /var/www/html -perm 644

您可以在数字模式前加上减号-或斜线/.

当斜线/用作前缀,则至少一个类别(用户、组或其他)必须至少设置相应的位才能使文件匹配。

考虑以下示例命令:

find . -perm /444

上述命令将匹配为用户、组或其他人设置读取权限的所有文件。

如果减去-用作前缀,那么为了使文件匹配,至少必须设置指定的位。以下命令将搜索所有者和组具有读写权限且其他用户可读的文件:

find . -perm -664

按所有者查找文件#

查找文件owned由特定用户或组使用-user and -group选项。

例如,搜索用户拥有的所有文件和目录linuxize,你会运行:

find / -user linuxize

这是一个现实世界的例子。假设您想查找用户拥有的所有文件www-data并更改匹配文件的所有权www-data to nginx:

find / -user www-data -type f  -exec chown nginx {} \;

查找并删除文件#

要删除所有匹配的文件,请附加-delete选项到匹配表达式的末尾。

确保仅当您确信结果与要删除的文件匹配时才使用此选项。在使用之前打印匹配的文件总是一个好主意-delete option.

例如,删除所有以.temp来自/var/log/,你会使用:

find /var/log/ -name `*.temp` -delete
Use the -delete选择时要极其谨慎。这find命令被评估为表达式,如果您添加-delete首先选择选项,该命令将删除您指定的起点以下的所有内容。

当谈到目录时,find只能删除空目录,与rmdir .

结论#

我们已经向您展示了如何使用find具有各种选项和标准的命令。

本文应该让您对如何在 Linux 系统上查找文件有一个基本的了解。您还可以访问查找手册页并阅读有关所有其他强大选项的信息find命令。

如果您有任何疑问或意见,请在下面留言。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux中的Find命令(查找文件和目录) 的相关文章

  • Visual Studio Code 中的集成终端是从外部打开的,而不是在内部打开的

    I have reinstalled Visual Studio Code and for some reason when I do the Ctrl Shift shortcut instead of opening a termina
  • Bower:安装 2 个版本的 jQuery

    我将如何安装 2 个版本的 jQuery使用凉亭 我想要 v2 0 以及 1 9 1 来支持浏览器回退 我遇到的问题是如果你跑bower install jquery 1 9 1 jquery 2 0 0第一个版本被第二个版本覆盖 因为它们
  • Apple 听写 - 在应用程序中使用

    有什么方法可以在本机 Apple 应用程序中利用 Apple 的听写语音转文本功能吗 你的问题有点模糊 最好先知道你尝试使用或做什么 或者你想要实现什么目标 更常见的是关键字识别 API 但可以用于此目的的语音识别 API 是张开耳朵 ht
  • `npm i` 命令有什么作用?

    什么是i在 npm CLI 中执行命令 我看到它是这样使用的 npm i package The iflag 是一个别名install so npm i package 是相同的 npm install package 从文档中 npm i
  • Linux命令:如何仅“查找”文本文件?

    经过几次谷歌搜索后 我得出的结论是 find my folder type f exec grep l needle text exec file grep text 这非常不方便 并且会输出不需要的文本 例如 mime 类型信息 还有更好
  • 如何更改 VS Code 中的当前工作目录?

    如何更改 VS Code 中的当前工作目录 比方说 我有一个名为 apps 的父文件夹 其中有一个名为 MyBeautifulApp 的子文件夹 我使用 vscode 打开了 apps 文件夹 我应该在命令行上运行什么命令不仅cd进入 My
  • Emacs 退出终端

    在 Emacs 中运行终端模式时使用M x term using C x C o我无法切换到另一个缓冲区来继续处理事情 我知道这是可能的M x shell但使用此命令时 shell 的某些方面不起作用 less more 手册页等 我想知道
  • 当 URL 可在浏览器中访问时,SSH Curl 不起作用

    This post is linked with another post of mine still unsolved Laravel 作曲家更新 连接被拒绝 https stackoverflow com questions 52404
  • 编写代码以:启动 R 会话、运行 R 脚本、终止会话、重复

    我正在寻找一种简单的 设置后就忘记它 的方式 无论是作为终端中的单个参数字符串还是简单的 Java 程序 来自动执行以下操作 1 启动R会话 2 告诉 R 源 R 文件包含冗长的并行模拟代码 3 完成后终止R会话 4 开始一个新的R会话 5
  • 查找 div 元素中的所有链接并禁用它们

    假设我有一些如下所示的 HTML 元素 div span a href some link Click me a span div Hello everybody Click a href some link else me a to do
  • 无法打开本地终端

    我尝试在 Android Studio 中初始化我的终端 但它给了我错误 它说 无法打开本地终端 java io IOException 无法创建 PTY 我的电脑运行的是 Windows 10 如何解决这个问题 当您从 Github 存储
  • 如何清除整个终端(PowerShell)

    我有一个问题 在powershell中使用clear或cls命令仅清除终端的可见部分 我想知道如何清除整个终端 顺便说一句 我使用 VSCode tl dr 问题是关于清零的both屏幕和回滚缓冲区 in the 综合终端 of 视觉工作室
  • 箭头键变成 Telnet 中的控制字符

    我在 Ubuntu 终端中 并通过 telnet 连接到服务器 现在每当我输入 up 时 它就会变成 A 其他箭头键也变成控制字符 有没有办法可以运行 telnet 以便它理解我的箭头键 这将是一个巨大的帮助 因为我想在我的命令历史记录中向
  • sqlite 插入需要很长时间

    我正在将不到 200 000 行插入到 sqlite 数据库表中 我只是在终端中通过 sqlite3 使用一个非常简单的 sql 文件 我打赌它已经运行了至少 30 分钟 这是正常现象还是我应该关闭该过程并尝试不同的方法 sqlite中的插
  • 如何不断刷新屏幕并实时更新[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在linux上写一个C程序 不断刷新屏幕并实时更新 例如类似于top终端中的命令 谁能指出我正确的方向 为了保持它跨终端类型的可移
  • 如何通过终端运行 JavaScript 脚本?

    例如 如果您要运行 Python 脚本 您可以输入python 文件名 py或者如果你想运行 C 程序制作文件名 then 文件名 你如何做到这一点 js files 另一个答案是 NodeJS Node js 是一个基于 Chrome 的
  • 在谷歌云上训练神经网络时出现“无法获取路径的文件系统”错误

    我正在使用 Google Cloud 在云上训练神经网络 如下例所示 https cloud google com blog big data 2016 12 how to classify images with tensorflow u
  • 在 MacOS 终端上运行 ffmpeg [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我对 MacOS 相当陌生 我发现使用终端来获取信息并不容易ffmpeg和我在 Window 上一样正常运行 我有 ffmpeg 二进制文件ffmpe
  • .profile 无法从 Mac 终端运行

    我有一个 profile 文件 我正在终端中读取并使用别名 但在某些时候 别名由于没有明确的原因而停止工作 其他命令仍在工作 为了快速修复 我删除了 rm 并在用户目录中重新创建了 profile 文件 我可以看到 至少在该目录中没有 ba
  • Alt 键快捷键在使用 Vim 的 gnome 终端上不起作用

    我在 gnome 终端上运行 Vim 但 alt 键映射不起作用 例如 imap

随机推荐

  • 下载 CentOS 7 – DVD ISO 映像

    CentOS 是一个 Linux 操作系统 它是 Red Hat Enterprise Linux 100 兼容的重建版 用户可以免费下载并使用该企业级操作系统 CentOS 项目宣布了发行版的新更新 发布了CentOS 7 9它源自 Re
  • 如何从完整 MySQL 转储文件中提取表备份

    mysql转储是 MySQL MariaDB 提供的用于备份数据库和表的实用程序 一般来说 我们会定期对数据库进行完整转储并保留它 但有时我们需要从备份中恢复单个或 2 3 个表 那么问题是如何从完整备份文件中恢复特定的表 本文将帮助您了解
  • 如何在CentOS/RHEL 9/8中安装Nagios服务器

    Nagios 是一款开源监控软件 允许系统管理员监控服务器 应用程序和网络设备的运行状况和性能 Nagios 提供了一个用于监控 IT 基础设施的全面解决方案 并可以在潜在问题变得严重之前向管理员发出警报 在本文中 我们将介绍在 CentO
  • 在 Linux 中使用命令将用户添加到辅助组中

    次要组是用户创建后添加的组 主要组是在用户创建过程中创建的 为了权限 它们之间没有区别 本快速教程可帮助您通过命令行将现有用户添加到 Linux 中的辅助组 Example Use the usermod command line tool
  • 最有效的 WordPress 行业特定插件

    WordPress WP 完全开源且价格极其实惠 是最独特 最流行的内容管理系统 CMS 之一 事实上 可以肯定的是 如果没有它 博客圈和现代商业世界都会完全不同 它的独特之处在于其众多的插件 其中一些插件是针对特定行业手工定制的 为所有使
  • Tomcat 默认管理员密码是什么

    安装新的 Tomcat 服务器后 默认情况下不会创建用于访问 Administrator 和 Manager Web 界面的用户 完成安装后 设置 Tomcat Admin 和 Manager 用户帐户并设置其密码 您还可以访问我们以下有关
  • 如何在 Apache 中仅允许 GET 和 POST 方法

    Apache HTTP Server 俗称 Apache 是世界上最流行 使用最广泛的 Web 服务器软件系统之一 它提供了许多功能 包括基于 HTTP 方法限制对资源的访问的能力 当您出于与安全或应用程序逻辑相关的原因而只想允许某些类型的
  • 使用 CRON 监控和通知 Linux 中的服务状态

    监控 Linux 系统上运行的关键服务的状态对于确保平稳 不间断的运行至关重要 实现此目的的一种方法是使用 cron 作业定期检查这些服务的状态 并在其状态发生变化时发送通知 在本文中 我们将探讨如何设置 cron 作业来监控服务状态 并讨
  • 如何从 CentOS 6.9-6.0 升级 CentOS 6.10

    CentOS 6 10已经发布 如果您使用旧版本 6 x 版本的 CentOS 操作系统 本文将帮助您将 CentOS 升级到最新版本 6 10 这个新版本有很多安全更改和软件包更新 目前 我的服务器运行的是 CentOS 6 9 请按照以
  • 在 Bash 中使用模运算符 (%)

    在编程中 模数或余数是返回除法余数的运算 在 Bash 中 模运算符由 符号表示 模运算符通常在编程中用于检查一个数字是否可以被另一个数字整除或执行需要循环模式的运算 在本文中 我们将探讨如何在 Bash 中使用模运算符 Syntax Ba
  • 什么是 MAC 地址?

    了解 MAC 地址的功能和重要性对于任何处理计算机网络 无论是家庭网络还是复杂的企业设置 的人来说都是至关重要的 本文提供了全面的指南媒体访问控制 MAC 地址 它们在网络通信中的作用以及它们在当今数字世界中的重要性 什么是 MAC 地址
  • 使用 cURL 发送电子邮件的分步指南

    cURL 短缺 URL 客户端 是一个开源软件项目 它提供了一个库 libcurl 和一个命令行工具 curl 用于使用各种网络协议传输数据 虽然它通常用于与 HTTP 和 HTTPS 交互 但它也可以处理 SMTP 这是在互联网上发送电子
  • 如何在 Ubuntu 和 Debian 上安装和使用 Imapsync

    Imapsync是一种 IMAP 传输工具 用于将电子邮件从一个 IMAP 服务器复制到另一个 IMAP 服务器 本文将帮助您在 Ubuntu Debian 和 Linuxmint 系统上安装 imapsync 并在两个 IMAP 服务器之
  • Linux 中不存在目录时如何创建

    Linux 是全球数百万用户使用的流行操作系统 使用 Linux 时的一项常见任务是创建和管理目录 在本文中 我们将介绍如何在 Linux 中创建目录 仅当目录尚不存在时 这在编写脚本或执行需要创建多个具有唯一名称的目录的任务时非常有用 使
  • 解决 Flask 中的“AssertionError:视图函数映射正在覆盖现有端点函数”错误

    Flask 是一种广泛使用的用 Python 编写的微型 Web 框架 它因其简单性和为开发人员提供的控制而广受欢迎 但是 与任何其他框架一样 开发人员在使用 Flask 时可能会遇到错误 其中一个错误是 断言错误 视图函数映射正在覆盖现有
  • 如何在 Linux 中打开端口

    在 Linux 操作系统中 端口是用于通过网络发送或接收数据的通信端点 网络端口由数字标识 每个端口号与特定类型的网络服务相关联 例如 端口 80 用于 HTTP 流量 端口 21 用于 FTP 端口 25 用于电子邮件 为了建立网络连接
  • 在 Bash 中使用管道 (|) 运算符

    Bash 脚本是管理和在类 Unix 系统上工作的一个组成部分 管道运算符 是 Bash 脚本工具包中一个非常强大的工具 尽管外观简单 但它是高效命令行操作 简化流程和实现复杂数据操作的基石 本文深入探讨了管道运算符的使用 探讨它是什么 它
  • 如何在 Bash 脚本中获取当前日期和时间

    作为一种脚本语言 Bash 广泛用于系统管理任务和自动化 Bash 脚本中的一项常见任务是获取当前日期和时间 这 date 命令以特定格式返回当前日期和时间 但您也可以使用自定义格式字符串来获取任何格式的日期和时间 在本文中 我们将探讨如何
  • Linux 中的 Uname 命令

    在本文中 我们将介绍uname命令 uname是一个命令行实用程序 可打印有关操作系统名称和系统硬件的基本信息 uname命令 The uname工具最常用于确定处理器架构 系统主机名和内核版本系统上运行 的语法uname命令采用以下形式
  • Linux中的Find命令(查找文件和目录)

    The find命令是 Linux 系统管理员工具库中最强大的工具之一 它根据用户给定的表达式在目录层次结构中搜索文件和目录 并可以对每个匹配的文件执行用户指定的操作 您可以使用find命令根据文件和目录的权限 类型 日期 所有权 大小等搜