跳转至

使用find命令轻松查找文件

1、基本用法

find命令的基本格式如下:

find [-H] [-L] [-P] [路径] [表达式]

其中,[路径]是希望开始搜索的目录路径,如未指定,则从当前目录开始搜索,[表达式]则是搜索条件

另有以下不常用的选项:

  • -P:不跟随符号链接,这是默认行为。
  • -L:跟随符号链接。
  • -H:除了处理命令行参数外,不跟随符号链接。如:-newer选项的参数是一个符号链接,此时会跟随符号链接。

当find检查或打印文件信息时,所使用的信息应来自符号链接本身的属性。这种行为的唯一例外是当命令行上指定的文件是符号链接,并且可以解析链接时。

对于这种情况,所使用的信息来自链接指向的任何内容(即,链接被跟随)。如果符号链接指向的文件无法检查,则使用链接本身的信息作为后备。如果-H有效,并且命令行上指定的路径之一是目录的符号链接,则将检查该目录的内容(当然,-maxdepth 0 将阻止这种情况)。

2、搜索条件

有些搜索选项后面可以指定数字参数,格式为:[+|-]n。

+n表示大于n,-n表示小于n,无符号表示等于n

1. 按文件名称查找

如果知道要查找的文件名称,可以直接使用该名称进行搜索。例如,要查找名为nginx的文件,可以使用以下命令:

find /path/to/search -name nginx

为了提高查找效率,应尽量缩小搜索范围,并指定尽可能明确的路径。

2. 按文件类型查找

上述查找也会找到名称为nginx的目录,可以使用-type选项只查找文件,使用以下命令

find /path/to/search -type f -name nginx

-type选项有以下文件类型参数值:

  • b:块设备特殊文件
  • c:字符设备特殊文件
  • d:目录
  • p:命名管道(FIFO)
  • f:普通文件
  • l:符号链接(字母L的小写)

如果-L选项有效,除非符号链接断开,否则这种情况永远不会发生。

如果要搜索对于-L有效时的符号链接,请使用-xtype

  • s:套接字

3. 按文件日期查找

使用-mtime选项,可以查找在特定天数之前修改过的文件。例如,要查找刚好在30天前修改过的文件,可以使用以下命令:

find /path/to/search -mtime 30

注意,-mtime后面的参数,30表示刚好在30天前,+30表示超过30天,-30表示30天之内。

当find计算出文件最后一次被修改的n天前的时间段时,任何小数部分都会被忽略,因此为了匹配-mtime +1,文件必须至少在两天前被修改过。

其它按时间查找的选项:

  • -atime:查找在特定天数之前访问过的文件。
  • -ctime:查找在特定天数之前更改过状态(如:修改权限)的文件。
  • -amin、-cmin、-mmin:与-atime、-ctime、-mtime选项类似,区别是时间单位为分钟。
  • -newer reference_file:查找修改时间比参考文件最后修改时间晚的文件。如果参考文件是一个符号链接,并且-H选项或-L选项有效,则始终使用它所指向的文件的最后一次数据修改时间。

4. 按文件大小查找

使用-size选项,可以查找大于或等于特定大小的文件。例如,要查找大于10M的文件,可以使用以下命令:

find /path/to/search -size +10M

+表示大于,-表示小于,参数值可以使用以下后缀表示文件大小单位:

  • b:表示512字节块(如果不使用后缀,则为默认值)
  • c:表示字节
  • w:表示两个字节的单词
  • k:表示千字节
  • M:表示兆字节
  • G:表示吉字节

5. 按其它条件查找

man find

三、日常应用场景

1. 查找并清理过时文件

在许多系统中,临时文件通常保存在/tmp目录下,我们自己也可以有专用于临时工作的目录~/tmp

可以使用find命令来查找这些临时文件,并使用-delete选项来删除它们。例如,要查找30天之前的临时文件并删除它们,可以使用以下命令

find ~/tmp -type f -mtime +30 -delete

可以根据大概日期查找文件。例如,要查找过去20~30天访问过的文件,可以使用以下命令:

find ~/tmp -type f -mtime +20 -mtime -30

2. 查找大文件并清理

有时候,系统中可能会有一些大而无用的文件。可以使用find命令来查找这些大文件,并删除它们以释放空间。例如,要查找下载目录中大于500MB的文件并删除它们,可以使用以下命令:

find ~/Downloads -size +500M -delete