岁月博客

  • 首页
  • 数据库
岁月博客
专注于网络安全与黑客文化
  1. 首页
  2. 数据库
  3. 正文

linux的find命令详解(Find 命令在 Linux 上的工作原理)

2022-04-06 308点热度 0人点赞 0条评论

Linux 和类 Unix 系统(即 macOS)上的 find 命令用于在特定目录中查找文件和目录。当您尝试查找和处理多个文件时,它是您可以使用的最有用的命令之一。它在文件审核期间也非常有用。

find 的语法如下所示,其中[OPTIONS]是可选设置,[LOCATION]是您要在其中查找内容的位置,是您要查找[SEARCH TERM]的文件名或目录名。

find [OPTIONS] [LOCATION] [SEARCH TERM]

如何在 Linux 和 macOS 上使用 Find 命令

find 命令的最基本形式如下所示:

find ./test *.txt

上述命令将查找任何以 结尾的文件.txt,即*.txt在./test文件夹中。这将返回所有匹配文件的列表。

处理符号链接

某些文件夹可能包含链接到文件系统另一部分的符号链接。因此,如果符号链接确实存在,您可能会在不知不觉中搜索更大的文件夹集。因此,有许多选项可以控制 find 遇到符号链接时发生的情况:

  • -P- 使用时,从不遵循符号链接。
  • -L- 使用时,始终遵循符号链接。
  • -H- 使用时,符号链接仅在命令行某处提及时才会被跟踪,即,如果您搜索链接,并且有一个名为链接的符号链接,find 将返回一个链接以及跟随该符号链接时找到的任何内容。

这些选项中的任何一个都可以使用,如下所示:

find -P ./test *.txt

按类型搜索文件

由于有许多不同类型的文件和目录,仅搜索特定字符串并不总是有用的。如果我们想提及我们正在寻找的文件或目录的类型,我们可以使用-type选项指定它。为了消除歧义,我们还在搜索字符串之前添加了 -name 选项。您也可以完全删除搜索字符串,然后搜索特定的文件类型。

下面,我们搜索类型为 f 的所有内容,它定义了一个常规文件。

find ./test -type f -name "*.txt"

所有类型的完整列表可以在下面找到:

  • b- 块设备
  • c- 字符设备
  • d- 目录
  • p- 命名管道(FIFO)
  • f- 常规文件
  • l- 符号链接 - 如果我们使用符号链接 -L 选项,则永远不会使用。
  • s- 插座

按尺寸搜索

我们可以使用 -size 选项按大小搜索。例如,我们要查找大小为 10MB 的所有文件,我们使用 10M:

find ./test -size 10M

这不是特别有用,所以如果我们想查找低于或高于某个大小的文件,我们分别添加 - 和 +。例如,下面将找到所有小于 10MB 的文件。

find ./test -size -10M

由于大小不是正常单位,即 MB、GB、kb,因此可以在下面找到完整的单位列表:

  • b- 512 字节块(默认)。
  • c- 只是字节。
  • w- 两字节字。
  • k- 千字节。
  • M- 兆字节。
  • G- 千兆字节。

按所有者或组查找

使用-groupor-user选项,我们还可以根据拥有者或所属组来查找目录或文件。例如,下面的代码查找所有者所在的 ./test 目录中的所有文件someOwner:

find ./test -user someOwner

同样,我们可以找到这样的组:

find ./test -group someGroup

按权限查找

使用-perm,我们可以找到具有特定权限组合的所有文件。下面将在 ./test 目录中找到权限为 0755 的所有文件。如果您想了解有关权限的更多信息,请阅读我们的文章chmod。

find ./test -perm 0755

限制查找命令深度

由于 find 命令是递归的,它有时会返回相当多的结果。如果要限制级别数,请使用该-maxdepth选项。同样,您可以-mindepth在开始返回结果之前定义要到达的最小深度。

find . -name "*.txt" -maxdepth 2

这里是两个-mindepthand的示例-maxdepth,它只返回 ./test 中文件夹内的文件。

find . -name "*.txt" -maxdepth 2 -mindepth 2

按上次访问/修改时间查找文件

有许多不同的方法可以根据文件的最后访问或修改时间来查找文件。例如,以下命令将仅查找文件*.txt夹./test中最近 5 分钟内最后一次访问的文件:

find . -name "*.txt" -amin 5

在这里,-amin指的是文件应该在多少分钟前被访问。以下是检查访问/修改时间的所有选项:

  • -amin n- 该文件最后一次访问是在 n 分钟前。
  • -atime n- 该文件的最后一次访问是在 n 天前。
  • -cmin n- 文件状态在 n 分钟前更改。
  • -ctime n- 文件状态在 n 天前更改。
  • -mmin n- 该文件最后一次修改是在 n 分钟前。
  • -mtime n- 该文件最后一次修改是在 n 天前。
  • -anewer file- 搜索文件的修改时间比[FILE] 更新。如果使用-Lor -H, and[FILE]是符号链接,则使用它指向的文件。
  • -cnewer文件 - 搜索文件状态比[FILE]. 如果使用-Lor -H, and[FILE]是符号链接,则使用它指向的文件。如果您添加-daystart到其中任何一个的末尾,则测量将从当天开始进行,而不是当前时间,即以下将查找过去 5 天内修改的任何内容,从当前开始日。此选项在 macOS 上不可用。
find . -name "*.txt" -mmin 5 -daystart

最后,还可以进行修改+。-例如,-amin -5将找到最近 5 分钟内修改过的任何内容,但-amin +5会找到超过 5 分钟之前修改过的任何内容。

在 Linux 和 macOS 中对 Find Command 执行命令

一旦你用 find 命令找到了一些文件或目录,你可能想为它们做点什么。幸运的是,我们可以使用 -exec 选项对找到的每个文件或目录运行命令。-exec 之后的任何代码都将在找到的每个文件上运行。

例如,下面的命令会将所有找到的文件更改为拥有一个名为someOwner.

find . -name "*.txt" -exec chown someOwner {} \;

\;末尾的只是表示该行的结束。指的{}是找到的当前文件 - find 将替换找到的每个文件的文件名,因此该命令更加安全。

注意:如果要在目录上执行此操作,请使用-execdir而不是-exec.

在 Linux 和 macOS 上使用 Find 删除文件

不用说,这应该谨慎使用。find 是递归的,您可能会在不知不觉中删除很多您不打算删除的文件。但是,如果要删除使用 find 命令找到的文件,可以在查找代码末尾使用 -delete 标志。如果你把它放在第一位,它将删除你指定的文件夹中的所有内容。所以要小心。

下面将删除所有格式为 *.txt 的文件(即带有 .txt 前缀的文件):

find . -name "*.txt" -delete

 

标签: 暂无
最后更新:2023-09-30

岁月

以梦为马,随处可栖

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

岁月

以梦为马,随处可栖

最新 热点 随机
最新 热点 随机
国家代号与区号 fiddler创建根证书不成功解决方案--岁月博客提供 Postern使用教程-岁月博客提供 Centos 7 彻底卸载清除 Docker 环境 启动docker容器报IPv4 forwarding is disabled. Networking will not work 青龙V2.10.13无法安装和删除依赖解决方法,npm err! enotempty: directory not empty, rename
国家代号与区号
释放linux内存,linux怎么释放物理内存 全新小米手环充不进去电怎么办(小米手环充电问题官方解决方法分享) 电脑屏幕调整护眼色 html中引入视频文件时视频挡住其他部分解决方案 京东脚本之微定制报错的简单修改脚本 win7系统任务栏无法解锁
最近评论
kkkki 发布于 1 年前(07月05日) 100好像可以开韩国了把,我今天误打误撞开成功了
岁月 发布于 2 年前(05月28日) 开这个配置,可以用一年
kiritoghy 发布于 2 年前(05月26日) 想问一下如果azure for students开B1S+64G SSD就是免费的吗,不会扣100刀...

COPYRIGHT © 2023 岁月博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang