linux的find命令详解

1.find命令简介

linux下一切都是文件,如何快速查找文件就需要依靠强大的find命令,有关于find命令的详细用法,可以在命令行使用man find,或info find 获取详细的文档信息。
find命令的一般格式

find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

-H,-L,-P是用来处理符号链接,
-H表示处理后面指定的链接。
-L表示处理所有链接。
-P表示不处理链接。

2.根据文件名匹配

-name是表达式中的测试项(test),支持文件名模式匹配,匹配的内容用单引号或双引号包裹。(这里的匹配模式不是正则表达式) find默认会从当前目录下开始搜索,如果[path…]没有被指定。

$ find / -name "*tomcat*"

从根目录下查找包含tomcat的文件或目录

$ find / -name "[^abc]*.txt"

从根目录下查找不以abc开头的txt文件
-name 对大小写敏感,如果希望不匹配大小写,使用-iname。

3.正则表达式

有时候用-name还不能满足需求是,就需要借助正则表达式
正则表达式匹配的全路径,不是文件名,例如我下面要找由文件名全为数字的c文件,需要在前面加上.*/去匹配路径前缀,否则获得想要的结果

find / -regex ".*/[0-9]*\.c"

4.逻辑运算符
( expr )

括号优先级最高,首先对括号内的求值
! expr

对expr表达式的值取反
-not expr

同上,但是POSIX不支持
expr1 expr2

不加任何运算符,相当于两个之间加and,即与运算,两个表达式值都为true整个才返回true。先对expr1表达式求值,若为false,则不对expr2求值。
expr1 -a expr2

同上
expr1 -and expr2

同上,但是POSIX不支持
expr1 -o expr2

表示对expr1和expr2两个表达式的值求或,左右两个值只要有一个为ture,整个表达式就是true。先对expr1表达式求值,若为ture,则不对expr2求值。
expr1 -or expr2

同上,但是POSIX不支持
expr1 , expr2

逗号表达式。expr1和expr2都会求值,但是只返回expr2的值,expr1的值会被丢弃
例如查找由数字组成的文件

find / -regex ".*/[0-9]*" -a -type f

4.时间戳

文件有3个时间属性:创建时间,修改时间,访问时间
修改时间:包括文件状态(权限修改时间),文件数据修改时间
最经访问时间

时间类型 按分钟 按天数
最近访问时间 amin atime
文件状态最近修改时间 cmin ctime
文件数据最近修改时间 mmin mtime

+,-表示大于或小于
例如查找当前目录下最近1小时内访问的文件

find -amin -60

5.文件类型

-type 后加指定的文件类型

b      特殊块文件(缓冲的)

c      特殊字符文件(不缓冲)

d      目录

p      命名管道 (FIFO)

f      普通文件

 l      符号链接

s      套接字

D      门 (Solaris 特有)
find /  -name "*tomcat*" -type f

查找包含tomcat的文件

6.文件大小搜索

-size n[cwbkMG],分别表示

b   for 512-byte blocks (this is the default if no suffix  is used)
c   for bytes
w    for two-byte words
k   for Kilobytes (units of 1024 bytes)
M    for Megabytes (units of 1048576 bytes)
G    for Gigabytes (units of 1073741824 bytes)

查找10M~100M的文件
find / -size +10M -100M

你可能感兴趣的:(linux)