在系统上按给定的雕件查找符合的的文件 有两种实现工具: locate和find
这篇博文主要介绍find的用法
find是通过遍历指定起始路径下的文件系统层级结构来完成条件查找
其工作特性是:
⒈查找速度略慢 -在find命令中可能会经常使用到正则表达式来查找
⒉精确查找
⒊实时查找
用法: find [OPTIONS] [查找起始路径] [查找条件] [相应处理动作]
find有多种查找条件:
⒈根据文件名查找
-name "pattern"
-lname "pattern" : 不区分文件名中的大小写并支持glob风格的通配符
-regex pattern : 基于正则表达式文件查找.匹配整个路径.而不是基名
⒉根据文件的从属关系查找
-user USERNAME 查找属主为指定用户的文件
-uid 根据UID进行查找 在删除用户之后之前该用户创建过的文件就只有UID 没有用户名
这种情况下可以用uid查找
-group GROUPNAME: 查找属组为指定组的文件
-gid 根据gid进行查找
-nosuer : 查找没有属主的文件
-nogroup : 查找没有属组的文件 查找被删除用户遗留下来的文件可以用
⒊根据文件类型查找
-typeTYPE
⒋组合测试 条件 -a/-o 条件
-a: 与 默认情况下就已经是组合"与"逻辑
-o: 或
-not,! :非 查找文件名不是te*的文件
⒌根据文件的大小查找
-size [+|-]#UNIT 常用单位:K,M,G
我们要查找一个1G的文件时并不是指文件大小正好等于1G 当查找1G文件的时候这里是有一定的 误差存在的 1G=1024M 1M=1024K 所以换算的时候肯定是有误差的
#UNIT: (#-1,#]size-1<size<=size
如我们要查找500M文件的时候实际上搜出来的文件大小是 499<x<=500 范围内的文件
-#UNIT:[0,#-1]<=size-1的
+#UNIT:(#,无限大) >size的
6.根据时间戳查找 在时间戳查找中也是有一定的误差范围的.同大小一样
以'天'为单位:
-atime [+|-]#:
#:[#,#+1)三天前的文件 范围为 3<=时间<4
-#: (#,0]
+#: (无限大,#)
以'分钟'为单位
-amin
-mmin
-cmin
7.按权限查找
-perm [/|-]mode 644权限形式
mode : 精确权限查找 664 就必须查找664
/mode : 任何一类用户(ugo)中的任何一位(rwx)符合条件即满足
9位权限之间存在"或"关系 600 查找用户6的文件
-mode : 每一类用户的权限中的每一位同时符合条件
9位权限之间存在'与关系' 范围是664时 777也符合条件
处理动作:
-print:输出至标准输出:默认的动作
-ls : 类抑于 ls-l
注:ls本身也是一个条件
-ls 展开的是其前面的条件
如 find /tmp -ls -user root 与
find /tmp -user root -ls 两个命令的结果是不一样的
前者是先把 /tmp目录下所有文件的详细信息都展示时候查找 root用户的文件
后者是先查找属主为root的文件 把属于root的文件详细展示出来
-delete:删除查找到的文件
-fls /PATH/TO/SOMEFILE 把文件的详细信息保存至制定文件中
-ok COMMAND {}\; :固定格式!! 对查找到的每个文件执行COMMAND表示的命令
-exec COMMAND {} \; : 每次操作用户不确认
注:不知道是我自己系统配置的原因还是CentOS6.7版本的原因还是我自己本身敲错命令了
如果各位在运行 -exec或者-ok的时候碰见了以下问题
一直等待输入 然后我按网上的方法 在最后添加了"" '' `` " {}\;"等符号
出现了遗漏参数的错误提示. 对此网上的解决方法基本上是在尾部不同位置加入引用副
但是我还是运行错误 所以试着在"{}" \ 结果在我的机器是能运行成功命令了
可以试试看.