欢迎,来自IP地址为:35.171.164.77 的朋友


Linux 系统查找文件十分方便,本教程将着重研究如何使用命令行工具来查找文件。对于喜欢使用桌面环境的用户,当然可以通过查找工具来查找文件,这里不做赘述。

Linux 系统查找文件,主要使用两条命令:find 和 locate,我们将逐条进行讲解。

首先讲解 find 命令

find 命令的语法和基本示例

find 命令的基本语法格式为:

find [OPTIONS] [PATH] [EXPRESSION]
  • OPTIONS:是用于控制 find 命令执行的参数
  • PATH:是 find 命令执行搜索时扫描的路径,例如 /etc/ 则会搜索 /etc 目录及期子目录
  • EXPRESSION:是用于指定搜索条件的表达示,可以是字符串,也可以是其它内容

find 命令最基本的使用示例如下:

# find -iname "example.txt"

命令执行后,会显示当前目录下所有名称为”example.txt”的文件信息(路径和文件名),即所谓的按文件名搜索。”-iname”参数用于指定按文件名搜索,而”-name”也表示按名称搜索,区别在于”-name”是大小写敏感的,而”-iname”是大小写不敏感的,即示例使用”-name”参数时只能搜索出名称为”example.txt”的文件,不能搜索出类似”eXample.txt”、”EXAMPLE.TXT”的文件,而使用”-iname”参数则可以搜索出。

如果需要搜索出不包含表达式的文件名,则可以增加”-not”参数,例如:

# find -not -iname "example.txt"

这时,搜索会显示所有文件名不为”example.txt”的文件信息。

根据文件类型查找文件

如果想根据文件类型来筛选文件,则可以使用”-type”参数来完成。

find 命令用于指定文件类型的表达工值如下:

  • f  :指普通文件
  • d :指目录
  • b :指块设备
  • l  :指链接文件
  • c :指字符设备

例如,我们如果想要搜索出”/var”目录下所有的符号链接文件,则可以使用如下命令:

# find /var -type l

组合条件搜索

我们可以将多个条件组合起来,用于更加精确的搜索。例如,我们想查找所有名称包含”example”的符号链接文件,则可以采用如下方式:

# find /var -type l -iname "*example*"

默认情况下,多个条件的组合方式是逻辑与,即所有条件均成立时的结果。当然,我们可以增加”-or”条件用于指定多个条件为逻辑或关系,例如:

# find -type -d -or -iname "example"

此时,会输出所有目录和名称为”example”的文件,如果没有”-or”,则会输出名称为”example”的目录。

根据大小查找文件

find  命令另一个非常有用的参数为”-size”,可以使用它来根据大小筛选文件。

文件大小的筛选参数,可以为如下值:

  • k   :KiB,1024 bytes
  • M :MiB,1024*1024 bytes
  • G  :GiB,1024*1024*1024 bytes
  • b  :512-bytes 块
  • c  :1 byte
  • w :2 bytes

例如,想要查找所有超过 1GB 大小的文件,可以使用如下方式:

# find /home -size +1G

对于小于 1GB 和等于 1GB 大小文件的查找,则采用如下方式:

# find /home -size -1G
# find /home -size 1G

根据时间查找

find 命令可以根据文件创建时间进行查找,支持如下参数:

  • -atime:根据文件最后的读写时间(Access time)
  • -mtime:根据文件最后的修改时间(Modification Time)
  • -ctime:根据文件 inode 元数据最后的变更时间(Change Time)

默认情况下,这些选项使用的参数是天。 例如,要查找 /var 目录中最近 2 天内修改过的文件,可以使用以下命令:

# find /var -mtime 2

与大小选项类似,您可以使用加号和减号操作数。 例如,要查找不到 2 天前修改的文件,您可以使用:

# find /var -mtime -2

要查找超过 2 天前修改的文件,您可以使用:

# find /var -mtime +2

您也可以使用分钟而不是天。 为此,您需要使用“-mmin”选项。 例如,要查找 /var 目录中最近 5 分钟内修改过的所有文件,您可以使用:

# find /var -mmin 5

根据 inode 查找

Linux 系统所有数据皆文件的特性,就可以根据文件 inode 来查找它:

# find -inum 123456

示例中的 123456 即为想要查找文件的 inode 号。

find 命令执行文件操作

如果要对 find 命令找到的文件运行(执行)命令,可以使用“-execute”选项,如下所示:

# find [CRITERIA] -exec [COMMAND] {} \;

在这种情况下,[CRITERIA] 就是您在 find 命令中使用的任何内容,如我们在前面的示例中所示。[COMMAND] 是您要对 find 命令找到的文件执行的命令。 确保包含 {}(这是 find 命令结果的占位符)和”\;”(这标志着命令的结束)。

例如我们想修改当前目录下”example.txt”文件的权限,可以使用如下命令形式实现:

# find -name "example.txt" -exec chmod 744 {} \;

find 命令一些常用参数

  • -maxdepth:设置 find 命令将在其中查找文件的目录的最大级别。如果有多个子目录,则可以限制为 2 层子目录
  • -delete:删除 find 命令找到的文件,您可以在 find 命令末尾添加“-delete”,它将删除找到的所有文件
  • -O3:将优化级别设置为3,这将使搜索速度最快。 默认级别为”-O1″
  • -user 和 -group:用于根据所有权过滤文件
  • -empty:查找空文件
  • -read:查找可读文件

使用 locate 命令查找文件

locate 命令可能不可用,因为它需要安装”mlocate”软件包,根据自己 Linux 系统,自行安装即可。

locate 命令根据其数据库运行。数据库每天更新一次。 事实上,locate 使用数据库,这使得它比 find 命令更快。 要更新数据库,只需运行以下命令:

# updatedb

locate 命令的语法非常简单,格式如下所示:

# locate term

其中”term”即为想要查找文件的文件名,例如:

# locate -i term

加入”-i”参数用于指示在查找时忽略大小写敏感。

要统计文件数量而不是使用 locate 命令查找文件,可以使用以下命令:

# locate -c example

这将输出名为”example”的文件的数量。

注意,在使用 locate 命令之前更新数据库非常重要,因为如果在更新数据库后添加或删除了任何文件,则会影响您使用 locate 命令的搜索结果。

以上就是关于如何使用 find 和 locate 命令在 Linux 中查找文件的全部内容,希望喜欢。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注