Linux的find命令
find命令是用来在指定目录下查找文件的。任何位于参数之前的字符串都将视为欲查找的目录名。
如果使用该命令,不设置任何参数,则find命令将在当前目录下查找子目录和文件。并且查找到的子目录和文件全部进行显示。
find语法
find (选项) (参数)
常用的选项参数
-name <范本样式>
:指定字符串作为寻找文件或目录的范本样式-regex<范本样式>
:指定字符串作为寻找文件或目录的范本样式-size<文件大小>
:查找符合指定的文件大小的文件-typ<文件类型>
:只寻找符合指定的文件类型的文件-path<范本样式>
:指定字符串作为寻找目录的范本样式-perm<权限数值>
:查找符合指定的权限数值的文件或目录-help或——help
:在线帮助-false
:将find指令的回传值皆设为False-true
:将find指令的回传值皆设为True-amin<分钟>
:查找在指定时间曾被存取过的文件或目录,单位以分钟计算-cmin<分钟>
:查找在指定时间之时被更改过的文件或目录atime<24小时数>
:查找在指定时间曾被存取过的文件或目录,单位以24小时计算ctime<24小时数>
:查找在指定时间之时被更改的文件或目录,单位以24小时计算-gid<群组识别码>
:查找符合指定之群组识别码的文件或目录-group<群组名称>
:查找符合指定之群组名称的文件或目录uid<用户识别码>
:查找符合指定的用户识别码的文件或目录user<拥有者名称>
:查找符和指定的拥有者名称的文件或目录
还有一些参数忽略为列举:
具体参考:Linux命令大全—find命令
实例
根据文件或者正则表达式进行匹配
- 列出当前目录及子目录下的所有文件和文件夹
find .
- 在
/home
目录下查找以.txt
结尾的文件名
find /home -name "*.txt"
同上,忽略大小写,使用iname
。
find /home -iname "*.txt"
- 在当前目录及子目录查找所有以
.txt
和.cfg
结尾的文件
find . -name "*.txt" -o -name "*cfg"
- 匹配文件路径或者文件
find /usr/ -path "*local*"
- 基于正则表达式匹配文件路径
find . -regex ".*\(\.txt\|\.pdf\)$"
- 忽略大小写的正则匹配
find . -iregex ".*\(\.txt\|\.pdf\)$"
否定参数
find /home ! -name "*.txt"
根据文件类型进行查找
find . -type 类型参数
类型参数列表:
f
:普通文件l
:符号连接d
:目录c
:字符设备b
:块设备s
:套接字p
:Fifo
eg:
find . -type f
find . -type d
根据文件时间戳进行搜索
find . -type f 时间戳
Linux文件系统每个文件都有三种时间戳
访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。
变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
搜索最近7天内被访问过的所有文件
find . -type -atime -7
搜索恰好在7天前被访问过的所有文件
find . -type -atime 7
搜索超过七天内被访问过的所有文件
find . -type -atime +7
搜索访问时间超过10分钟的所有文件
find . -type f -amin +10
根据文件大小匹配
find . -type f -size 文件大小单元
b
:块(512字节)c
:字节w
:字(2字节)k
:千字节M
:兆字节G
:G字节
搜索大于10KB的文件
find . -type f -size +10k
搜索小于10KB的文件
find . -type f -size -10k
搜索等于10KB文件
find . -type f -szie 10k
删除匹配文件
find . -type f -name "*.txt" -delete
根据文件权限进行匹配
搜索当前目录下权限为777的文件
find . -type f -perm 777
找出当前目录下权限不是700的txt文件
find . -type f -name "*.txt" ! -perm 700
找出当前目录用户zhang拥有的所有文件
find . -type f -user zhang
找出当前目录用户组gzhang拥有的所有文件
find . -type f -group gzhang
查找长度为0的文件
find . -type f -empty