一、 locate: 非实时查找,根据数据库(速度快);模糊查找;无法查找新增文件
find:实时查找,精确匹配;速度慢;
find [查找位置] [查找标准] [处理动作]
查找位置:默认为当前目录;
查找标准:默认为查找指定目录下的所有文件包括子目录及隐藏文件;
处理动作:默认显示到标准输出;
查找标准:
-name "文件名称": 根据文件名查找
支持glob, *, [], ?
-iname "文件名称":根据文件名查找,不区分字符大小写;
-user USERNAME: 根据属主查找;
-group GRPNAME: 根据属组查找;
-uid UID;
-gid GID;
-nouser:查找没属主的文件;
-nogroup: 查找没有属组的文件;
组合查找条件:
-a: 与 默认条件可省略
-o:或
-not, !: 非
例如:查找/tmp目录下没有属主,并且文件名以一个字符.test文件;
# find /tmp -name "?.test" -nouser -ls
-type
f: 普通文件
d: 目录
b: 块设备
c: 字符设备
l: 符号链接
p: 命名管道
s: 套接字文件
-size
12MB (11.,12)MB 11-12间都属于12
-size [+|-]2MB +大于-小于
常用单位:
k 大写报错必须小写
M
G
-atime [+|-]# 访问时间 3距此时间刚好3天,-3三天前到现在,+3 3天前以致无限前 另一种说法是至少3天没访问
-mtime [+|-]# 修改时间
-ctime [+|-]# 改变时间
-amin [+|-] 单位分钟
-mmin [+|-]
-cmin [+|-]
-perm [+|-]MODE
没有[+|-]表示精确权限匹配;
+MODE: 任何一类用户的任何一位权限匹配即可; rwx有任意一位同即可
-MODE: 每类用户的每位权限都匹配;如-111 都必须有执行权限但不限制其他位rw
处理动作:
-print: 显示
-ls: 显示查找到的文件的详细信息;
-exec COMMAND \;
find /tmp -atime +30 -exec mv {} {}.old \; 花括号代表文件名 此命令将查找出的所有文件重命名
-ok COMMAND \; 与exec不同之处是此命令逐个确认更改操作而exec不经确认直接修改 例子:
查找/usr目录下不属于root,bin,或student的文件;
find /usr -not \( -user root -o -user bin -o -user student \) 括号需转义
find /usr -not -user root -a -not -user bin -a -not -user student
查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组均修改为root;
find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \; -o优先级不如-a需要加括号
find / \( -nouser -o -nogroup \) -a -atime -1 | xargs -i chown root:root {} xargs通过管道接受之前查找结果作用同exec但无需最后的\;花括号为之前查找的文件 -i为调用之前查找结果