find命令查找文件内容(使用 find 命令在 Linux 上查找文件和目录)_学习资源库

find命令查找文件内容(使用 find 命令在 Linux 上查找文件和目录)

2022-11-28 08:51:47  浏览:1314  作者:管理员
查看详情

  学习 find 命令的原因有很多。

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

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

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

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

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

  $ find ~ -name "foo"

  /home/tux/Documents/examples/foo

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

  $ find ~ -iname "foo"

  /home/tux/Documents/examples/foo

  /home/tux/Documents/examples/Foo

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

  $ find ~ -iname "foo*"

  /home/tux/Documents/examples/foo

  /home/tux/Documents/examples/Foo

  /home/tux/Documents/examples/foo.xml

  /home/tux/Documents/examples/foobar.txt

  ?表示单个字符:

  $ find ~ -iname "foo*.???"

  /home/tux/Documents/examples/foo.xml

  /home/tux/Documents/examples/foobar.txt

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

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

  $ find ~ -iregex ".*foo"

  /home/tux/Documents/examples/foo

  /home/tux/Documents/examples/Foo

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

  $ find ~ -mtime -7

  /home/tux/Documents/examples/foo

  /home/tux/Documents/examples/Foo

  /home/tux/Documents/examples/foo.xml

  /home/tux/Documents/examples/foobar.txt

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

  $ find ~ -mtime +1 -mtime -7

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

  d- 目录

  f- 文件

  l- 链接文件

  s- 套接字

  p- 命名管道(用于 FIFO)

  b- 块设备(通常是硬盘)

  下面是一些例子:

  $ find ~ -type d -name "Doc*"

  /home/tux/Documents

  $ find ~ -type f -name "Doc*"

  /home/tux/Downloads/10th-Doctor.gif

  $ find /dev -type b -name "sda*"

  /dev/sda

  /dev/sda1

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

  $ find /usr -iname "*xml" | wc -l

  15588

  $ find /usr -maxdepth 2 -iname "*xml" | wc -l

  15

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

  $ find /usr -mindepth 8 -iname "*xml" | wc -l

  9255

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

小小影视电影天堂全网VIP电影、电视剧免费观看。更多有男人喜欢的特别美女视频哦!

2023最新好看的电视剧

评论区

共 0 条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

【随机内容】

返回顶部