Find命令用来在指定目录下查找文件。Linux下类似的查找命令还有 which、locate、whereis。
区别:
which 查找命令字所在的位置 eg. which ls
locate 模糊匹配(只要是包含关键字的文件都能查找出来),不是实时的,基于数据库查找, updatedb 升级 locate的数据库,不升级的话,一些新文件可能找不到
由于基于数据库查找,所以速度特别快
whereis只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息
find 实时查找、精确查找、遍历整个指定目录中的文件,速度很慢、支持多种查找条件(属主,属组,权限,文件名等)
语法:
find [ find_path ] [ 条件 ] [ 处理动作 ] ,中括号表示该选项可以不指定,有缺省值
find_path : 如果不写,默认在当前工作目录查找
条件:如果不写,会查找该路径下所有的文件
处理动作:默认打印到屏幕上 print
下面先介绍条件(匹配标准):
-name file_name : 根据文件名进行查找,区分大小写
-iname file_name : 根据文件名进行查找,不区分大小写
-regex PATTERN 根据正则表达式的模式进行查找 //不常用
-user 通过属主进行查找
-group 通过属组进行查找
-uid UID 通过UID进行查找 // 适用于 用户删除了,或者属主是数字的情况
-gid GID 通过GID进行查找 // 用户删除了,下一个新建的用户默认继承删除用户的文件的拥有权
-nouser 查找属主不是某用户的文件 查找没有属主的文件 // 比如删除了用户,文件的属主变成数字
-nogroup 查找没有属组的文件
-type 根据文件类型进行查找,下面是Linux下各种文件类型
-b 块设备
-c 字符设备
-d 目录
-f 普通文件
-p 命名管道
-s 套接字文件
-l 链接文件
-size 根据文件大小进行查找 [ + | - ] k m g // k = kb, m=mb,g=gb,都是存储大小的单位
-size 5k 精确匹配大小为5k的文件
+ 大于
- 小于
根据时间戳进行查找 [ + | - ]-mtime 时间单位为天 // stat file_name 查看文件的时间戳
-atime: 时间单位为天
-ctime: 时间单位为天
-mmin: 时间单位为分钟
-amin: 时间单位为分钟
-cmin: 时间单位为分钟
-perm 根据权限查找
-perm MODE
MODE: 644 ,精确匹配 三位都要匹配
/MODE:任意一位匹配即可 // 不是精确匹配,是文件权限的某一位包含MODE里面的任意一位即可
-MODE: 文件权限能够完全包含此MODE时才能匹配 eg. -644 则 644 744 655 都能匹配
条件组合:
-a 同时满足多个条件 eg. find /tmp -user username -a -perm 644 // 相当于and
-o 满足一个条件即可 // 相当于 or
-not 不满足条件的被查找出来
查找条件通配符
* 通配任意个数的任意字符
? 通配单个的任意字符 // 与扩展正则里面的含义不一样
然后介绍的是处理动作 :
-print : 默认动作,查找结果打印到屏幕
-ls 以类似于 ls -l 的形式显示结果的信息
-ok COMMAND {} \; 执行动作时提示用户是否执行 , {}代表文件名占位符
-exec COMMAND {} \; 执行动作时不提示用户,直接执行
最后,这些并不是find的全部参数,但掌握上述的各种参数的用法也能满足日常使用了
如果想深入了解,建议多用用man find来 查看 官方帮助文档。
有兴趣的小伙伴可以在下方留下你们的评论,我会经常查看评论并回复的!!!