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指定查找文件系统下的内容
-gidGID查找
-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对匹配的文件执行删除操作;
-execfind通过exec参数调用exec后面的命令对匹配文件进行操作;用{} 来代表匹配的内容,以\;表示结束
-execdirfind通过exec参数调用exec后面的命令对匹配文件进行操作;用{} 来代表匹配的内容,以\;表示结束
-fprint将完整的文件名打印到文件文件中。
-ok交互式操作;比如-exec,但先问问用户。如果用户同意,运行该命令。否则返回false。如果运行该命令,它的标准输入将从/dev/null.重定向
-okdir就像-execdir,但首先询问用户的方式和-ok一样。如果用户不同意,则返回false。如果运行该命令,它的标准输入将从/dev/null.重定向
-print在标准输出上打印完整的文件名,然后换行。
-printf格式化打印;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上部分均来自于find在线帮助文档,本人仅进行了翻译、收集、整理工作;有不对的地方请多多指点,另外建议各位同学不要跟我这种神经病一样,花一天的时间翻译一个man手册~~~

 注意要点

  • find支持'!'取反符号
  • find默认支持通配符,不支持基础正则
  • find尽量用printf进行格式输出,不要用ls打印

 

转载于:https://www.cnblogs.com/guge-94/p/10411419.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值