>[success] # 文件查找 -- find 1. **find** -- 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名,`find 起始路径 -name "被查找文件"`(如下图和window 查找文件顺序很像) ![](https://img.kancloud.cn/ac/07/ac0701c44d55213de7bb79525163aace_864x116.png) 2. 如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。 并且将查找到的子目录和文件全部进行显示。(**如下图 find 查找了当前的所有文件和目录,并且包括子目录和文件**) ![](https://img.kancloud.cn/6e/ad/6eadc65b4f5d40a38ec7be507b173ce8_721x446.png) 3. **find命令** 可进行的查找如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。也就是说可以**用于搜索机器上所有的资料,按照文件名字搜索,linux一切皆文件** >[info] ## 参数 `find [搜索范围] [搜索条件] ` # find path [options] * 举例子`find . -maxdepth 1 -name "a"` 找到当前目录 深度为1层 名为a 的 ![](https://img.kancloud.cn/9f/48/9f48377eed48f4cb39c24ea3a7056193_500x82.png) ~~~ pathname 命令所查找的目录路径 'options 模块' -depth 从指定目录下最深层的子目录开始查找 -maxdepth levels 查找的最大目录级数,levels为自然数 -regextype type 改变正则表达式的模式,默认为emacs 'tests 模块' -mtime [-n|n|+n] 按照文件的修改时间来查找文件(-n 文件更改距离现在n天以内,+n表示文件更改时间距离现在n天以前,n是距离现在第n天) -atime [-n|n|+n] 按照文件的访问时间来查找文件 -ctime [-n|n|+n] 按照文件的状态改变时间来查找文件 -amin 按照文件的访问时间来查文件,单位为分钟 -cmin 按照文件的状态时间改变来查找文件,单位为分钟 -mmin 按照文件的状态修改时间来查找文件,单位为分钟 -group 按照文件属主来查找文件 -name 按照文件名来查找文件,只支持*,?,[]等特殊通配符 -newer 查找更改时间比指定文件新的文件 -nogroup 查找没有有效用户组的文件,即/etc/group中不存在 -nouser 查找没有有效属主的文件,即/etc/passwd中不存在 -path pattern 指定路径样式 -perm 按照文件权限来查找文件 -regex 按照正则表达式 -iregex 接正则表达式,不区分大小写 -size n[cwbkmg] 查找文件长度为n块的文件 -user 按照文件属主来查找文件 '-type 模块' b 块设备 c 字符设备 d 目录 p 管道文件 l 符号链接文件 f 普通文件 s socket文件 D door 'actions模块' -delete 将查找出的文件删除 -exec 对匹配的文件执行该参数所给出的shell命令 -ok 和-exec作用相同,但在执行每个命令之前,都会让用户先确定 -prune 使用这一选项可以使find命令不在当前指定目录中查找 -print 将匹配的文件输出到标准输出 ! 取反 -a 取交集 -o 取并集 ~~~ >[danger] ##### 按名称搜索 * `find / -name 11.txt` 搜索根目录下 `name `是`11.txt` 的文件 避免大范围的搜索,会非常消耗系统资源 * `find /etc -name yum.conf` 在/etc目录下文件yum.conf * `find . -name 'yum\*' ` 表示当前目录下查找文件名开头是字符串`yum`的文件 >[danger] ##### 通配符 1. `find`是在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配 ~~~ * 匹配任意内容 ? 匹配任意一个字符 [] 匹配任意一个中括号内的字符 ~~~ 2. `find . -name "ab[cdef].txt"`查找当前文件夹下 文件名是 符合`ab[cdef].txt`规则的文件 >[danger] ##### -i -- 不区分大小写 `find . -iname "Ab[cdef].txt"` >[danger] ##### -user -- 按所有者进行搜索 `find /root -user root` 在root目录下查找用户所有者是root `find /root -nouser` 无用户所有者 >[danger] ##### -mtime -- 按时间搜索 `find . -mtime +5` ,`+、- `表示大于和小于 | 参数 | 含义 | | --- | --- | | atime | 文件访问时间 | | ctime | 改变文件属性 | | mtime | 修改文件内容 | | 参数 | 含义 | | --- | --- | | \-5 | 5天内修改的文件 | | 5 | 5天前当前修改的文件 | | +5 | 5天前修改的文件 | >[danger] ##### -size -- 按大小搜索 `find . -size +0k` 注意 k小写,M大写,`+、- `表示大于和小于,`kMG`表示大小单位,k(小写字母)表示kb,M表示MB,G表示GB | 参数 | 含义 | | --- | --- | | \-8k | 小于8K | | 8k | 等于8K | | +8k | 大于8K | | +8M | 小于8M | * 使用条件参数 1. 参数有: **!,-and(-),-or(-o)** ~~~ (1)find /tmp -size +10c -and -mtime +2 #在/tmp目录下查找大于10字节并在2天前修改的文 件 (2)find / -user root -or -user susan #在/目录下查找用户是root或者susan用户的文件 (3)find /tmp ! -user susan #在/tmp目录中查找所有不属于susan用户的文件 ~~~ >[danger] ##### 常用文件特征查找 ~~~ (1)find / -atime -2 # 查找在系统中最后48小时访问的文件 (Access Time,文件读取访问时 间) (2)find / -empty # 查找在系统中为空的文件或者文件夹 (3)find / -group susan # 查找在系统中属于group为susan的文件 (4)find / -mtime -1 #查找在系统中最后24小时里修改过的文件 (modify time) (5)find / -user susan #查找在系统中属于susan这个用户的文件 (6)find / -size +10000c #查找出大于10000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB) (7)find / -size -1000k #查找出小于1000KB的文件 ~~~ >[danger] ##### 简单使用的语法 ~~~ 1.'find [你要从哪找] -type [文件类型] -size  [文件内容大小]  -name  [内容名字是什么]' 1.1.-type f 是找普通文本文件 / d 是找 文件夹 类型 2.'find / -name "\*.txt' -- 在系统上 全局搜索,所有的.txt文件 3.'find /etc -type f -name "ifcfg\*" ' -- etc目录下网卡名字是以ifcfg开头的 ,文本类型文件 5.'find . -type f -name "python\*" ' -- 找出当前目录下所有的pyton 名字相关文件(f)内容 6.'find / -size +10M -name "\*.txt"' -- 全局搜索,超过10M大小的 txt文本 ~~~ >[danger] ##### 案例 ~~~ 1.'find / -maxdepth 3 - type f -atime 7 -delete ' -- 恰好在7天内被访问过的文件删除 2.'find /tmp -size +10k -a -size -20k'-- 查找/etc目录下,大于10KB并且小于20KB的文件 3.find /tmp -size +10k -a -size -20k -exec ls -lh {} \; exec 对上个命令的结果进行操作 -a and 逻辑与,两个条件都满足 -o or 逻辑或,两个条件满足一个就可以 ~~~