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表示不处理链接。
-name是表达式中的测试项(test),支持文件名模式匹配,匹配的内容用单引号或双引号包裹。(这里的匹配模式不是正则表达式) find默认会从当前目录下开始搜索,如果[path…]没有被指定。
$ find / -name "*tomcat*"
从根目录下查找包含tomcat的文件或目录
$ find / -name "[^abc]*.txt"
从根目录下查找不以abc开头的txt文件
-name 对大小写敏感,如果希望不匹配大小写,使用-iname。
有时候用-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
文件有3个时间属性:创建时间,修改时间,访问时间
修改时间:包括文件状态(权限修改时间),文件数据修改时间
最经访问时间
时间类型 | 按分钟 | 按天数 |
---|---|---|
最近访问时间 | amin | atime |
文件状态最近修改时间 | cmin | ctime |
文件数据最近修改时间 | mmin | mtime |
+,-表示大于或小于
例如查找当前目录下最近1小时内访问的文件
find -amin -60
-type 后加指定的文件类型
b 特殊块文件(缓冲的)
c 特殊字符文件(不缓冲)
d 目录
p 命名管道 (FIFO)
f 普通文件
l 符号链接
s 套接字
D 门 (Solaris 特有)
find / -name "*tomcat*" -type f
查找包含tomcat的文件
-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