Linux的find命令
命令解释
find
-- 在目录层次结构中搜索文件
-- linux下参数最多,最为复杂的命令
命令语法
find [-h] [-l] [-p] [-d debugopts] [-olevel] [path...] [expression]
常见示例
基于目录深度的查找
find /etc/ -mindepth 1 -type f # 查找/etc目录后至少1个子目录深度的所有文件 find /etc/ -maxdepth 1 -type f # 查找/etc目录后至多1个子目录深度的所有文件 # 这招根据目录成熟设定范围很好用
基于文件系统的查找
find / -mount # 这招可以屏蔽其他分区的文件搜索
基于最后一次访问时间查找
find / -amin -60 # 最后一次访问时间在60分钟之内的文件或者目录 find / -atime -2 # 最后一次访问时间在24*2小时之内的文件或者目录 find / -mount -anewer /root/anaconda-ks.cfg # 最后一次访问时间最接近anaconda-ks.cfg文件的最后一次访问时间的文件
基于最后一次状态更改时间查找
find / -cmin -60 # 最后一次状态更改时间在60分钟之内的文件或者目录 find / -ctime -2 # 最后一次状态更改时间在24*2小时之内的文件或者目录 find / -mount -cnewer /root/anaconda-ks.cfg # 最后一次状态更改时间最接近anaconda-ks.cfg文件的最后一次访问时间的文件
基于最后一次内容修改时间查找
find / -mmin -60 # 最后一次内容修改时间在60分钟之内的文件或者目录 find / -mtime -2 # 最后一次内容修改时间在24*2小时之内的文件或者目录 find / -mount -newer /root/anaconda-ks.cfg # 最后一次内容修改时间最接近anaconda-ks.cfg文件的最后一次访问时间的文件
基于文件大小查找
find / -mount -empty # 空目录或者空文件查找 find / -size -512b # 查找根目录下面大小在512bit以内的文件或者目录 find / -size +1024c # 查找根目录下面大于1024字节的文件或者目录 find / -size 1024k # 查找根目录下面等于1024k的文件或者目录 find / -size +500m # 查找根目录下面大于500m的文件或者目录 find / -size +1g # 查找根目录下面等于1g的文件或者目录
基于权限大小查找
find / -executable # 查找根目录分区下面可执行的文件或者可搜索的目录 find / -gid 0 # 查找超级用户组所拥有的文件或者目录 find / -uid 0 # 查找超级用户所拥有的文件或者目录 find / -group root # 查找root用户组所拥有的文件或者目录 find / -nogroup root # 查找非root用户组所拥有的文件或者目录 find / -nouser root # 查找非root用户所拥有的文件或者目录 find / -perm 755 # 查找权限是755的文件或者目录 find / -perm 4755 # 查找权限属主中带有粘滞位的文件或者目录 find / -readable # 查找可读权限的文件或者目录 find / writable # 查找可写权限的文件或者目录
基于文件名称查找
find / -mount -name "file" # 查找根目录分区下面名叫'file'的文件或者目录 find / -mount -iname "file" # 查找根目录分区下面名叫'file'的文件或者目录,不区分大小写 find / -mount -path "*net*" # 查找根目录分区路劲中包含net的所有文件或者目录 find / -mount -ipath "*net*" # 查找根目录分区路劲中包含net的所有文件或者目录,不区分大小写
基于链接数查找
find / -mount -links 3 # 查找根目录分区下面链接文件数大于等于3的文件或者目录
基于inode值查找
find / -inum 101207402 # 查找根目录下面inum是101207402值的文件或者目录
对文件进行操作
find /tmp -type f -exec rm -rf {} \; # 对tmp下面的普通文件执行删除操作;调用系统的rm命令 find /tmp -type -delete # 对tmp下面的普通文件执行删除操作;
对匹配文件进行格式化输出
find /etc -type f -printf 'file:\t %t+ %p\n' # 下次再研究了,printf很有用的一个参数
基于文件类型查找
find / -type f # 查找根目录下面的所有文件 b 块文件,如:磁盘文件 c 字符文件,如:驱动文件 d 目录文件 p 管道文件 f 普通文件 l 链接文件 s 套接文件 d 这个我也不知道是啥文件
查找3天内,被被更改过的文件;
find / -mount -ctime -3 -printf '%t %p\n' %t表示ctime时间打印,%p代表匹配的内容,printf默认不支持换行,所以需要\n
转义符 |
||
\a | 警钟 | |
\b | 退格键 | |
\c | 立即停止此格式的打印并刷新输出。 | |
\f | 换页 | |
\n | 换行 | |
\r | 回车 | |
\t | 制表符 | |
\v | 垂直制表符 | |
\0 | 不知道干啥的。。。 | |
\\ | 转义反斜杠 | |
\nnn | 不知道干啥的。。。 | |
%% | 打印一个百分比 | |
%ak | 文件最后一次访问时间的格式由k指定,k可以是如下内容: | |
@ | 计算从1970年1月1日零时到此时此刻一共经历的秒数 | |
h | 以24小时制返回最后访问时间的小时时刻 | |
i | 以12小时制返回最后访问时间的小时时刻 | |
k | 等同于h | |
l | 等同于i | |
m | 以60分钟制返回最后访问时间的分钟时刻 | |
p | 返回最后访问时间是上午还是下午 | |
r | 以12小时制返回周后访问时间的具体时刻,并且返回上午或者下午 | |
s | 返回最后访问时间的具体秒 | |
t | 以24小时制返回周后访问时间的具体时刻 | |
+ | 返回最后访问时间的日期和时间,日期和时间用+号分隔 | |
x | 以12小时制返回最后访问的具体时刻 | |
z | 返回最后访问时间的时区 | |
a | 返回最后访问时间是星期几,仅打印周期前三个字母 | |
a | 返回最后访问时间是星期几,打印完整周期 | |
b | 返回最后访问时间是哪个月份,仅打印前三个字母 | |
b | 返回最后访问时间是哪个月份,打印完整月份 | |
c | 返回最后访问时间的具体时刻,格式:sat nov 04 12:02:33 est 1989 | |
d | 返回最后访问时间的数字月份 | |
d | 返回最后访问时间的年月日,格式:mm/dd/yy | |
h | 等效于b | |
j | 返回最后访问时间的具体日子,格式:001..366 | |
m | 返回最后访问时间的具体月份,格式:01..12 | |
u | 返回最后访问时间的具体周期,格式:00..53(linux默认一年最多53周) | |
w | 周的天 | |
w | 等效于u | |
x | 等效于d | |
y | 返回最后访问时间的年份,仅返回最后两个数字 | |
y | 返回最后访问时间的年份,返回具体年份 | |
%b | 此文件在512字节块中使用的磁盘空间量。 | |
%c | 返回最后状态更改时间 | |
%ck | 返回最后状态更改时间,k的值参考%ak | |
%d | 文件在目录树中的深度; | |
%d | 文件存在的设备号,以十进制表示 | |
%f | 删除所有主要目录的文件名 | |
%f | 文件所在文件系统的类型; | |
%g | 文件的组名,如果组没有名称,则为数字组id | |
%g | 文件的数字组id | |
%h | 文件名的主要目录(除了最后一个元素)。如果文件名不包含斜%h说明符展开为"."。 | |
%h | 在其中找到文件的命令行参数。 | |
%i | 文件的inode编号 | |
%k | 此文件在1k块中使用的磁盘空间量。 | |
%l | 符号链接的对象 | |
%m | 文件的权限位,以数字形式展示 | |
%m | 文件的权限位,以字母形式展示 | |
%n | 到文件的硬链接的数量 | |
%p | 匹配到文件的路劲及名称 | |
%p | 仅匹配文件的名称,不包含路劲 | |
%s | 文件的大小,字节为单位 | |
%s | 文件的稀疏 | |
%t | 文件最后一次修改时间 | |
%tk | 文件最后一次修改时间,k的值参考%ak | |
%u | 文件的用户名,如果用户没有名称,则为数字用户id。 | |
%u | 文件的用户名id | |
%y | 文件的类型 | |
%y | 基本等同于%y | |
%z | 文件的安全上下文 |
基本参数
-p | 默认参数,不允许跟符号链接文件 |
-l |
默认参数,当查找到软链接文件时,默认指向源文件属性;当-l生效时, -type参数指向的类型是源文件 |
-h | 默认参数,不允许跟硬链接文件 |
-d |
调试参数,打印诊断信息,这有助于诊断为什么find没有做您想做的事情的问题。 调试选项的列表应该用逗号分隔。 |
-olevel |
启用查询优化。一共有从0-3四个优化级别。其中0和1级别是等价的,系统默认值为1, 这个选项需要在o后面直接跟一个表示查询优化的十进制数字,如o2。 |
-d | 深度的同义词,与freebsd、netbsd、macos x和openbsd兼容。使用较少 |
-daystart |
从今天开始测量时间(-amin, -atime, -cmin, -ctime, -mmin, -mtime), 而不是从24小时之前。此选项只影响稍后出现在命令行中的测试。使用较少 |
-depth | 查找文件时,首先查找当前目录中的文件,然后再其他子目录中查找 |
-follow | 如果find命令遇到符号链接⽂文件,就跟踪⾄至链接所指向的⽂文件。 |
-help | 帮助 |
-ignore_readdir_race | 屏蔽错误消息,默认会打印find输出错误的信息,百度大半天也没看到有人用 |
-maxdepth | 设定目录查找最大层级,可以和-mindepth结合使用 |
-mindepth | 设定目录查找最小层级,可以和-maxdepth使用 |
-mount |
不要在其他文件系统上下行目录。 -xdev的另一个名称,用于与find的其他一些版本兼容。 可以用来屏蔽proc分区 |
-noignore_readdir_race | 关闭-ignore_readdir_race的效果,基本没见过 |
-noleaf | 不要假设目录包含的子目录比它们的硬链接数少2个,从而进行优化。基本没见过 |
-regex |
更改稍后在命令行中进行的-regex和-iregex测试所理解的正则表达式语法。 find默认只支持通配符,不支持基础正则表达式 |
-version | 查看find版本 |
-warn, -nowarn |
打开或关闭警告消息。这些警告仅适用于命令行使用,而不适用于find在搜索目录时可能 遇到的任何条件。如果标准输入是tty,则默认行为对应-warn,否则对应-nowarn。 |
-xautofs | 不要在autofs文件系统上下降目录,基本没见过 |
-xdev | 等效于-mount |
+n | 大于n |
-n | 小于n |
n | 等于n |
-amin n | 最后一次访问时间是多少分钟 |
-anewer file |
最后一次访问文件的时间比修改文件的时间更近。 |
-atime n |
上次访问文件是在24小时前。 当find计算出文件最后一次被访问的24小时前的时间段时, 将忽略任何小数部分,因此要匹配-atime +1,文件必须至少在两天前被访问。 |
-cmin n | 文件的状态上次更改是在n分钟前。 |
-cnewer file |
最后一次更改文件状态的时间比修改文件的时间更近。 |
-ctime n |
文件的状态上次更改是在24小时前。 |
-empty | 文件是空的,它可以是常规文件,也可以是目录。 |
-executable | 匹配可执行文件和可搜索目录(在文件名解析意义上)。 |
-false | 总是错误的 |
-fstype type | 指定查找文件系统下的内容 |
-gid | gid查找 |
-group | 用户组查找 |
-ilname | 不区分大小写查找链接文件 |
-iname | 不区分大小写查找文件 |
-inum | 根据inode查找文件 |
-ipath | 路劲查找,路劲名称不区分大小写 |
-iregex | 类似-regex,但匹配不区分大小写。 |
-links | 根据链接文件数查找 |
-lname | 文件是一个符号链接,其内容与shell模式模式匹配。 |
-mmin | 文件的数据上次修改是在n分钟前。 |
-mtime | 文件数据上次修改是在n*24小时前。 |
-name | 文件名查找文件 |
-newer |
文件被修改的时间比文件晚。如果file是一个符号链接,并且-h选项或-l选项生效, 则始终使用它所指向的文件的修改时间。 |
-nogroup | 非指定用户组的文件 |
-nouser | 非指定用户的文件 |
-perm | 根据文件权限进行查找 |
-readable | 匹配可读文件 |
-size | 根据文件大小匹配 |
-type | 根据文件类型进行查找 |
-uid | 根据用户id进行查找 |
-user | 根据用户名进行查找 |
-used | 文件上次访问是在其状态上次更改后的n天 |
-writable | 匹配可写的文件 |
-delete | 对匹配的文件执行删除操作; |
-exec |
find通过exec参数调用exec后面的命令对匹配文件进行操作; 用{} 来代表匹配的内容,以\;表示结束 |
-execdir |
类似于-exec,但是指定的命令是从包含匹配文件的子目录中运行的, 这通常不是您开始查找的目录。 |
-fprint | 将完整的文件名打印到文件文件中。 |
-ok |
交互式操作;比如-exec,但先问问用户。如果用户同意,运行该命令。否则返回false。 如果运行该命令,它的标准输入将从/dev/null.重定向 |
-okdir |
就像-execdir,但首先询问用户的方式和-ok一样。如果用户不同意,则返回false。 如果运行该命令,它的标准输入将从/dev/null.重定向 |
在标准输出上打印完整的文件名,然后换行。 | |
-printf | 格式化打印; |
以上部分均来自于find在线帮助文档,本人仅进行了翻译、收集、整理工作;有不对的地方请多多指点,另外建议各位同学不要跟我这种神经病一样,花一天的时间翻译一个man手册~~~
注意要点
- find支持'!'取反符号
- find默认支持通配符,不支持基础正则
- find尽量用printf进行格式输出,不要用ls打印
上一篇: js对文件和二进制操作的一些方法汇总
下一篇: *死后,宋美龄送去一个花圈上写六个字