Linux文件搜索——find命令剖析

本文详细介绍Linux下的find命令,包括基本用法、多种搜索条件组合及实际应用场景。通过具体例子讲解如何根据文件名、权限、时间等属性查找文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

找不到文件怎么办?不记得文件名怎么办?不记得路径怎么办?……今天小编带大家学习find命令的强大功能!

在窗口中输入如下命令来查看find指令的详细信息

[jing@localhost ~]$ find --help

信息如下():
find --help命令结果

这里小编简单剖析下这些信息:
用法: find [path…] [expression]

默认的path(查找路径)是当前目录(./);
默认的expression(表达式)是-print。

表达式应由operators(运算符)、options(选项)、tests(测试)和actions(行为)组成。由于tests中的一些函数较为基础,这里先剖析tests。

tests:

N can be +N or -N or N

N可以是+N、-N或者N:
○ +N代表日期/时间在N天/分钟以前所有的时间段
○ -N代表日期/时间在N天/分钟以前那刻到现在的时间段
○ N代表现在起倒数第N天(24小时)的时间段
形象表示在数轴上如下图所示:
时间表示
函数:
1. -amin N -mmin N -cmin N
分别表示:按N分钟(+N/-N)atime、mtime、ctime搜索。
在Linux中进行以下步骤:新建文件→按分钟查找文件→更改另一文件内容→查看是否修改成功→再次按分钟查找文件
结果如下图所示:
-amin -mmin -cmin
这里就能够证明,N确实是以分钟为单位的!
2. -anewer FILE -cnewer FILE
分别表示:比FILE文件的atime/ctime时间新(数值更大,时间更晚)的文件。
在Linux中依次创建三个文件,逐个执行-anewer函数如下图所示:
-anewer
-cnewer同理,下面我们验证一下,更改一个ctime时间较FILE小的文件,它是否会出现在find -cnewer FILE 的结果中呢?
-cnewer
果然,file1在更改后,成为比file2的ctime新的文件被find命令搜索到了!
3. -atime N -mtime N -ctime N
分别表示:按N天(+N/-N/N)atime、mtime、ctime搜索文件。
小编于昨天创建了三个文件分别是test_atime.c、test_mtime.c、test_ctime.c,今天创建了文件today1.c,那么要获取到现在为止一天之内修改过的文件,就应该输入如下命令:
find -atime
-atime、-mtime的使用方法同理。
4. -empty
该选项表示:搜索空文件(stat查看文件元信息时,会显示是否为空文件:http://blog.youkuaiyun.com/enchanting_/article/details/64124020,该博客开篇介绍了stat命令)
如下图所示,创建两个文件,并给test_no_empty.c文件添加内容,查找空文件时该文件将不会被列出:
查找空文件
5. -uid N -gid N -user NAME -group NAME
分别表示:根据所属用户id、所属组id、所属用户名、所属组名查找文件。
首先,输入ll命令,查看当前目录下两文件的所属用户、所属组分别是谁:
当前目录文件信息
(stat命令查看test_empty.c文件元信息,知道jing用户的id为1000,root的id为0)
分别使用-gid,-group选项查找文件结果如下:
find -gid
6. -readable -writable -executable
分别表示:可读、可写、可执行
在当前目录下使用touch命令分别创建文件read.c、write.c、exe.c;
使用chmod改变三文件的权限如下图ll命令的结果(黄色方框)所示:
这里写图片描述
如上图,分别使用三个选项去find得到的结果,即为对应的文件名。
由此可见,这三个选项对应的是当前用户的权限,即如果当前用户不具有任何权限,即便其所属组、other具有所有权限,find的结果也为空。
如下图所示测试该结论,三种权限的find都找不到read.c,结论成立!
这里写图片描述
7. -name PATTERN
顾名思义,即根据文件名搜索文件,但很显然大多数情况下并不会记得完整的文件名,此时就需要通配符*来帮助我们:
通配符的使用

以下介绍主要的四种操作符。

operators:

1. EXPR1 -o EXPR2 EXPR1 -or EXPR2
顾名思义,即为“或”,寻找符合左边或者右边表达式的文件
-o -or 运算
2. ( EXPR ) ! EXPR -not EXPR
逻辑运算符“非”,即寻找不符合该条件的文件
这里写图片描述
3. EXPR1 -a EXPR2 EXPR1 -and EXPR2
与or用法相似,但含义为“且”。
4. EXPR1 , EXPR2
与C语言中逗号表达式的含义相同:都会执行,但返回最后一个式子的结果。如下图所示:
这里写图片描述

以下介绍主要的几个行为。

actions:

  1. -delete
    将查找结果的所有文件删除。
    这里写图片描述
  2. -print0
    由于有默认的-print选项,若使用-print0选项,输出的结果将不换行。
    这里写图片描述
  3. -fprint FILE -fprint0 FILE
    顾名思义,此处将把查找到的结果写入文件中。
    这里写图片描述

以上即小编剖析的find命令,如有疑问或建议,请评论给小编噢n(≧▽≦)n!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值