服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|

服务器之家 - 服务器系统 - Linux - 使用 find 命令在 Linux 上查找文件和目录

使用 find 命令在 Linux 上查找文件和目录

2021-12-14 00:38Linux中国LCTT MjSeven 译 Linux

不管我决心如何组织文件,似乎总有无法找到文件的时候。但是,无论遇到什么困难,我知道在 POSIX 系统 上,总是有 find 命令可以帮助我。

不管我决心如何组织文件,似乎总有无法找到文件的时候。有时是因为我不记得最初的文件名,其他时候,我知道名字,但我不记得在哪里保存它了。甚至有时我需要一个我最初就没有创建的文件。但是,无论遇到什么困难,我知道在 POSIX 系统 上,总是有 find 命令可以帮助我。

安装 find

使用 find 命令在 Linux 上查找文件和目录

find 命令由 POSIX 规范 定义,它创建了一个用于衡量 POSIX 系统的开放标准,这包括 Linux、BSD 和 macOS。简而言之,只要你运行的是 Linux、BSD 或 macOS,那么 find 已经安装了。

但是,并非所有的 find 命令都完全相同。例如,GNU 的 find 命令有一些 BSD、Busybox 或 Solaris 上 find 命令可能没有或有但实现方式不同的功能。本文使用 findutils 包中的 GNU find,因为它很容易获得且非常流行。本文演示的大多数命令都适用于 find 的其他实现,但是如果你在 Linux 以外的平台上尝试命令并得到非预期结果,尝试下载并安装 GNU 版本。

按名称查找文件

你可以借助正则表达式使用完整或部分的文件名来定位文件。find 命令需要你给出想搜索的目录;指定搜索属性选项,例如,-name 用于指定区分大小写的文件名;然后是搜索字符串。默认情况下,搜索字符串按字面意思处理:除非你使用正则表达式语法,否则 find 命令搜索的文件名正是你在引号之间输入的字符串。

假设你的 Documents 目录包含四个文件:Foo、foo、foobar.txt 和 foo.xml。以下是对 foo 的字面搜索:

  1. $ find ~ -name "foo" 
  2. /home/tux/Documents/examples/foo 

你可以使用 -iname 选项使其不区分大小写来扩大搜索范围:

  1. $ find ~ -iname "foo" 
  2. /home/tux/Documents/examples/foo 
  3. /home/tux/Documents/examples/Foov 

通配符

你可以使用基本的 shell 通配符来扩展搜索。例如,* 表示任意数量的字符:

  1. $ find ~ -iname "foo*" 
  2. /home/tux/Documents/examples/foo 
  3. /home/tux/Documents/examples/Foo 
  4. /home/tux/Documents/examples/foo.xml 
  5. /home/tux/Documents/examples/foobar.txt 

? 表示单个字符:

  1. $ find ~ -iname "foo*.???" 
  2. /home/tux/Documents/examples/foo.xml 
  3. /home/tux/Documents/examples/foobar.txt 

这不是正则表达式语法,因此 . 在示例中只表示字母“点”。

正则表达式

你还可以使用正则表达式。与 -iname 和 -name 一样,也有区分大小写和不区分大小写的选项。但不一样的是,-regex 和 -iregex 搜索应用于整个路径,而不仅仅是文件名。这意味着,如果你搜索 foo,你不会得到任何结果,因为 foo 与 /home/tux/Documents/foo 不匹配。相反,你必须要么搜索整个路径,要么在字符串的开头使用通配符:

  1. $ find ~ -iregex ".*foo" 
  2. /home/tux/Documents/examples/foo 
  3. /home/tux/Documents/examples/Foo 

查找近一周修改过的文件

要查找近一周修改的文件,使用 -mtime 选项以及过去的天数(负数):

  1. $ find ~ -mtime -7 
  2. /home/tux/Documents/examples/foo 
  3. /home/tux/Documents/examples/Foo 
  4. /home/tux/Documents/examples/foo.xml 
  5. /home/tux/Documents/examples/foobar.txt 

查找近几天修改的文件

你可以结合使用 -mtime 选项来查找近几天范围内修改的文件。对于第一个 -mtime 参数,表示上一次修改文件的最近天数。第二个参数表示最大天数。例如,搜索修改时间超过 1 天但不超过 7 天的文件:

  1. $ find ~ -mtime +1 -mtime -7 

按文件类型限制搜索

指定查找文件的类型来优化 find 的结果是很常见的。如果你不确定要查找的内容,则不应该使用此选项。但如果你知道要查找的是文件而不是目录,或者是目录而不是文件,那么这可能是一个很好的过滤器。选项是 -type,它的参数是代表不同类型数据的字母代码。最常见的是:

  • d - 目录
  • f - 文件
  • l - 链接文件
  • s - 套接字
  • p - 命名管道(用于 FIFO)
  • b - 块设备(通常是硬盘)

下面是一些例子:

  1. $ find ~ -type d -name "Doc*" 
  2. /home/tux/Documents 
  3. $ find ~ -type f -name "Doc*" 
  4. /home/tux/Downloads/10th-Doctor.gif 
  5. $ find /dev -type b -name "sda*" 
  6. /dev/sda 
  7. /dev/sda1 

调整范围

find 命令默认是递归的,这意味着它会在指定的目录中层层搜索结果。这在大型文件系统中可能会变得不堪重负,但你可以使用 -maxdepth 选项来控制搜索深度:

  1. $ find /usr -iname "*xml" | wc -l 
  2. 15588 
  3. $ find /usr -maxdepth 2 -iname "*xml" | wc -l 
  4. 15 

也可以使用 -mindepth 设置最小递归深度:

  1. $ find /usr -mindepth 8 -iname "*xml" | wc -l 
  2. 9255 

下载速查表

本文仅介绍 find 的基本功能,它是一个很好的搜索工具,但对于强大的 Parallel 命令来说,它也是一个非常有用的前端。学习 find 的原因有很多,所以 下载我们免费的 find 速查表 吧,它可以帮助你了解有关该命令的更多信息。

原文地址:https://linux.cn/article-14071-1.html

延伸 · 阅读

精彩推荐
  • Linux在Linux系统中安装使用WPS的方法

    在Linux系统中安装使用WPS的方法

    这篇文章主要介绍了在Linux系统中安装使用WPS的方法,在Linux上缺少微软的office的情况下,WPS实为办公文件处理的不二选择,需要的朋友可以参考下 ...

    开源中文社区12152019-09-30
  • Linuxlinux常用命令之tar命令详解和使用实例

    linux常用命令之tar命令详解和使用实例

    通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具。linux中最流行的tar是麻雀虽小,五...

    linux命令大全6102019-11-18
  • LinuxVMware克隆Linux提示找不到eth0的解决方法

    VMware克隆Linux提示找不到eth0的解决方法

    VMware是款虚拟机,能够装载各种系统,但在VMware克隆Linux的时候提示找不到eth0,关于这个问题,很多朋友不知道如何处理,下面就与大家分享下提示eth0找不...

    服务器之家5352019-10-17
  • LinuxLinux系统下安装配置postfix邮件服务器的教程

    Linux系统下安装配置postfix邮件服务器的教程

    这篇文章主要介绍了Linux系统下安装配置postfix邮件服务器的教程,文中示例基于CentOS环境进行演示,需要的朋友可以参考下...

    无为5502019-07-04
  • Linux在Linux系统下更改桌面分辨率的方法

    在Linux系统下更改桌面分辨率的方法

    这篇文章主要介绍了在Linux系统下更改桌面分辨率的方法,需要的朋友可以参考下 ...

    Linux教程网6542019-11-11
  • Linux谈谈Linux运维人员是否需要掌握一门编程语言

    谈谈Linux运维人员是否需要掌握一门编程语言

    最近经常有同行的朋友或者 Linux 初学者问我: 运维 人员是否需要学一门语言,那么该学哪种语言呢? 对于这个问题,我分两个方面回答: 首选,在大数据...

    服务器之家7332019-05-23
  • Linuxlinux中locate命令使用介绍(快速搜寻档案)

    linux中locate命令使用介绍(快速搜寻档案)

    locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这...

    linux命令大全3882019-11-19
  • Linuxlinux系统中如何查看日志

    linux系统中如何查看日志

    内部总是发现有病毒和恶意的攻击,我想请问如何查看日志 如何查看日志 [quote][i]原帖由 yanggang209]内部总是发现有病毒和恶意的攻击,我想请问如何查看日...

    Linux教程网3982020-04-19