find语法
find 起始目录(path) 表达式(选项、条件测试、动作)
find path -option [condition ] [ -print -exec -ok command ] { }\;
path:指定find开始查找的目录,默认条件下,find会递归的查找指定目录下所有子目录和文件
-option : 选项
condition :条件测试
-print : 将查找到的文件输出到标准输出 (动作)
-exec command {} \; 将查找到的文件执行command操作,{}和\;之间有空格 (动作)
-ok 和 -exec 相同,只不过在操作前要询问用户
选项:
-d 、-depth : 先找目录下的内容,然后是目录本身
-maxdepth <n> : 从指定目录最多往下找n层
-mindepth <n> :从指定目录下至少往下找n层
-prune : 防止进入符合某种条件的目录
-xdev 、-mount : 不要进入其他文件系统查找
条件测试:
-name 或 -iname :按文件名查找,-iname只不区分大小写
find . -name ‘*sql’ #在当前目录查找以文件名sql结尾的文件 find /tmp /opt ./ -name '*sock' #在/tmp 、/opt 、当前目录下查找以文件名sock结尾的文件
-user : 按照文件属主查找
-nouser : 查找无效属主文件
-group : 按照文件属组查找
-nogroup : 查找无效属组文件
-uid :查找属于uid号用户的文件
find /tmp -user 'gino' #在/tmp目录下查找文件属主是gino的文件
linux服务器端有时会出现一些无主文件(用户及用户组被删除但是所属文件没有删除) find . -nouser -nogroup -delete #在当前目录下查找无主文件,并删除
-type :按文件类型查找
文件类型: b(块设备) c(字符设备) d(目录) f(普通) l(链接) s(套接字) p(管道)
find /tmp -type s #查找/tmp目录下的socket文件
-atime n, -ctime n, -mtime n: 单位为天(a 访问时间,c 状态改变时间,m修改时间)(n为数字 <n为正好等于,-n为小于n,+n为大于n>)
-amin n,-cmin n,-mmin n:单位为分钟(a访问时间, c状态改变时间, m修改时间)(n为数字<n为正好等于,-n为小于n,+n为大于n>)
-anewer file , -cnewer file , -newer file :时间比文件file新
find . -mmin -50 #在当前目录下查找50分钟内修改的文件 find . -ctime +2 #在当前目录下查找状态更改时间大于48小时的文件(2天) find . -newer samp.sh #在当前目录下查找比samp.sh文件新的文件 find . -newer samp.sh !sbmp.sh #在当前目录下查找 比samp.sh文件新,但是比sbmp.sh文件旧的文件
-size :按文件的大小单位查找
文件大小单位:
b :以512bytes为单位的块 (默认)
c : 字节
w : 双字节字符数
k : 1024 bytes
M : 1024 * 1024 bytes
G : 1024 * 1024 * 1024 bytes
find . -size +10240k #查找文件尺寸大于10240k的文件 find . -size -2048 #查找文件尺寸2048 blocks(2048 * 512 bytes) find . -size 0 #查找空文件 find . -empty #查找空文件
-perm : 按照权限查找
权限匹配规则(以220为例)
220 : 文件权限必须为220
-220 : 文件权限最小为220
/200 : 符合 u,g,o 三个权限中的任意一个都匹配,(但不匹配220)
#以下三条命令一致,查找属主或属组 有写权限的文件 find . -perm /220 find . -perm /u+w,g+w find . -perm /u=w,g=w
-readable : 可读
-writable : 可写
-executable : 可执行
find . -readable #查找当前目录可读文件
动作:
-print : 打印查找到的结果
-ls : 相当于ls -l
-exec command {} \; 执行 command命令
-ok command {} \;同-exec ,但是开启交互模式
-delete : 删除找到的文件
find . -name '*sql' -exec cp {} /tmp \; #查找当前目录下以sql结尾的文件,将其复制到/tmp目录下 find . -nouser -nogroup -ok rm -rf {} \; #查找当前目录无主文件,将其删除(交互模式) find . -name '*sql' -ls #查找当前目录下所有后缀为sql的文件,并执行ls -l