本文只总结一些经常使用的用法,更详细的说明见man find和 info find。express
find命令经常使用来查找文件或目录,能够根据给定的路径和表达式查找所需的文件或目录。该工具是由findutils包提供的。服务器
find是从左向右的顺序处理多个expression,所以expression的先后顺序不一样会形成不一样的搜索性能差距。
find的搜索机制是根据expression返回的true/false决定的,每搜索一次都会判断一次,只有评估的最终结果为true才算是找到,并切入到下一个搜索点。工具
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
expression分为三种:options、test、action。对于多个表达式,find是从左向右处理的,因此表达式的先后顺序不一样会形成不一样的搜索性能差距。性能
find解析完语法以后,开始搜索文件,在搜索过程当中,检测到的文件都会被test expression进行测试,符合条件的将被保留下来。测试
参数 | 说明 |
---|---|
-name | 按名称查找 |
-size | 按大小查找 |
-user | 按文件属主查找 |
-type | 按类型查找 |
-mtime | 按照文件的更改时间查找 |
-atime | 按照文件的访问时间查找 |
-perm | 按照文件权限查找 |
-regex | 按照正则表达查找 |
大多数状况下,-name足以解决许多问题,碰到复杂的状况,可使用正则-regex。
须要注意的是-regex不是匹配文件名,而是匹配完整的文件名(包括路径)。debug
actions部分通常都是执行某些命令,或实现某些功能。日志
参数 | 说明 |
---|---|
-delete | 删除文件 |
-exec command ; | -exec 参数后面跟的是 command 命令,它的终止是以“;”为结束标志的,因此这句命令后面的分号是不可缺乏的,考虑到各个系统中分号会有不一样的意义,因此前面加反斜杠 |
-ok command ; | 相似于-exec,但在执行命令前会交互式进行询问,若是不一样意,则不执行命令并返回false,若是赞成,则执行命令,但执行的命令是从/dev/null读取输入的 |
使用-name参数查看/etc目录下面全部的.conf结尾的配置文件:code
find /etc -name '*.conf'
使用-size参数查看/etc目录下面大于2M的文件:io
find /etc -size +2M
搜索当前目录下七天内被访问过的全部文件:table
find . -type f -atime -7
找出/var/log下不是以.log结尾的文件:
find /var/log/ -type f ! -name '*.log'
找出/opt/logs下包含ab2019-05并以.log结尾的文件:
find /opt/logs/ -regex '.*ab.*2019-05.*.log'
查看当前目录全部文件的属性:
find . -type f -exec ls -l { } \;
找到/opt/logs下7天之前的日志文件并删除它们:
# 方法一 find /opt/logs -name '*.log' -mtime +7 -exec rm -rf {} \; # 方法二 find /opt/logs -name '*.log' -mtime +7 -delete # 方法三 find /opt/logs -name '*.log' -mtime +7 -ok rm -rf {} \;
在生产环境人工执行命令时,尽可能使用-ok方式删除文件。