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