Find 查找命令时过滤掉某些文件或目录 以及 -maxdepth、-mindepth的用法
时间:2019-11-21
本文章向大家介绍Find 查找命令时过滤掉某些文件或目录 以及 -maxdepth、-mindepth的用法,主要包括Find 查找命令时过滤掉某些文件或目录 以及 -maxdepth、-mindepth的用法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1)find过滤目录
使用find命令在linux系统中查找文件时,有时需要忽略某些目录,可以使用"-path 过滤的目录路径 -prune -o"参数来进行过滤。不过必须注意:要忽略的路径参数要紧跟着搜索的路径之后,否则该参数无法起作用。
首先拿一个例子来说明下: 比如查找/data/web/ssy/online路径下的的目录,并统计目录大小,以G位单位进行排序(默认为降序),并统计前10个大小的目录。命令如下: # find /data/web/ssy/online/* -maxdepth 0 -type d -exec /usr/bin/du -sh {} \;|grep '[0-9]G'|sort -rh|head -10 查找/data/web/ssy/online路径下除tmp目录之外的目录,并统计目录大小,以G位单位进行排序(默认为降序),并统计前10个大小的目录。命令如下 # find /data/web/ssy/online/* -path /data/web/ssy/online/tmp -prune -o -maxdepth 0 -type d -exec /usr/bin/du -sh {} \;|grep '[0-9]G'|sort -rh|head -10 注意: 1)"-maxdepth 0" 表示只查找到/data/web/ssy/online下的目录。如果是"-maxdepth 1"则表示查找到/data/web/ssy/online/xxx下的目录 2)find命令中的过滤、忽略、排除使用"-path 过滤的文件或目录-prune -o ",其中-prune类似于if判断,如果-prune之前的语句为真,比如找到了 前面-path指定的/data/web/ssy/online/tmp目录,就不再执行后面-o跟的语句了,如果没有找到则执行后面的语句。这样就做到了排除效果! 其中的"-o" 是 "-or" 的意思! 3)-path要过滤掉的文件或目录路径参数一定要紧跟在要搜索的路径之后,否则过滤效果就不会实现!!也就是说上面的"-path /data/web/ssy/online/tmp" 必须紧跟着放在"/data/web/ssy/online/*"后面,否则查找时就不会过来掉/data/web/ssy/online/tmp这个目录。 ======================================================================================================================================================== 示例一: 假设/opt/kevin目录下有三个目录:test1,test2,test3,三个目录下都有list文件 [root@localhost kevin]# pwd /opt/kevin [root@localhost kevin]# ls test1 test2 test3 现在要查找/opt/kevin路径下的list文件,并忽略掉test2目录,操作如下: [root@localhost kevin]# pwd /opt/kevin [root@localhost kevin]# find . -type f -name list ./test1/list ./test2/list ./test3/list [root@localhost kevin]# find . -type f -name list -print ./test1/list ./test2/list ./test3/list 使用-path 和 -prune -o实现过滤效果 [root@localhost kevin]# find . -path test2 -prune -o -type f -name list -print ./test1/list ./test2/list ./test3/list [root@localhost kevin]# find . -path ./test2/ -prune -o -type f -name list -print find: warning: -path ./test2/ will not match anything because it ends with /. ./test1/list ./test2/list ./test3/list 当搜索路径不是全路径时,过滤目录路径必须是./test2 才能实现过滤效果! [root@localhost kevin]# find . -path ./test2 -prune -o -type f -name list -print ./test1/list ./test3/list 要过滤的目录操作-path必须紧跟着搜索路径 才能实现过滤效果 [root@localhost kevin]# find . -type f -path ./test2 -prune -o -name list -print ./test1/list ./test2/list ./test3/list 当搜索路径时全路径时,过滤路径也要是全路径,才能实现过滤效果 [root@localhost kevin]# find . -path /opt/kevin/test2 -prune -o -type f -name list -print ./test1/list ./test2/list ./test3/list [root@localhost kevin]# find /opt/kevin/ -path /opt/kevin/test2 -prune -o -type f -name list -print /opt/kevin/test1/list /opt/kevin/test3/list [root@localhost kevin]# find /opt/kevin/* -path /opt/kevin/test2 -prune -o -type f -name list -print /opt/kevin/test1/list /opt/kevin/test3/list [root@localhost kevin]# find /opt/kevin -path /opt/kevin/test2 -prune -o -type f -name list -print /opt/kevin/test1/list /opt/kevin/test3/list [root@localhost kevin]# find /opt/kevin -path /opt/kevin/test2/ -prune -o -type f -name list -print find: warning: -path /opt/kevin/test2/ will not match anything because it ends with /. /opt/kevin/test1/list /opt/kevin/test2/list /opt/kevin/test3/list 由上面可知: 1)当要搜索的目录不是全路径时,要过滤掉的目录必须是"./test2"才能实现过滤效果。如果是"test2"或者"./test2/"都不能实现过滤效果。 2)当要搜索的目录是全路径时,要过滤掉的目录也必须是全路径才能实现过滤效果!要过滤掉的目录后面不能加"/",否则也不能实现过滤效果。 3)过滤操作"-path /opt/kevin/test2/ -prune -o"必须紧跟在要搜索路径的后面才能实现过滤效果,否则也不能实现过滤效果。 如果要过滤两个目录,比如过滤掉test2和test3目录,则使用转义符\( -path ./test2 -o -path ./test3 -prune -o \) 注意:两个转义符前面都要有空格!! [root@localhost kevin]# find . -path ./test2 -o -path ./test3 -prune -o -type f -name list -print ./test1/list ./test2/list [root@localhost kevin]# find . \( -path ./test2 -o -path ./test3 \) -prune -o -type f -name list -print ./test1/list [root@localhost kevin]# find /opt/kevin/ \( -path /opt/kevin/test2 -o -path /opt/kevin/test3 \) -prune -o -type f -name list -print /opt/kevin/test1/list 除了上面的方法,还有一个方法如下: [root@localhost kevin]# find . -type f -name list ! -path ./test2/* ! -path ./test3/* ./test1/list
2)find过滤文件
先查看对应文件,然后使用"grep -v"进行过滤
比如只查找/opt/kevin目录下的文件(不查找/opt/kevin的二级目录下的文件),并过滤到haha2文件 [root@localhost kevin]# pwd /opt/kevin [root@localhost kevin]# ll total 0 -rw-r--r-- 1 root root 0 Nov 21 18:51 haha -rw-r--r-- 1 root root 0 Nov 21 18:51 haha1 -rw-r--r-- 1 root root 0 Nov 21 18:51 haha2 -rw-r--r-- 1 root root 0 Nov 21 18:51 haha3 -rw-r--r-- 1 root root 0 Nov 21 18:51 haha4 drwxr-xr-x 2 root root 18 Nov 21 18:24 test1 drwxr-xr-x 2 root root 18 Nov 21 18:24 test2 drwxr-xr-x 2 root root 18 Nov 21 18:24 test3 [root@localhost kevin]# find . -maxdepth 1 -type f ./haha ./haha1 ./haha2 ./haha3 ./haha4 [root@localhost kevin]# find . -maxdepth 1 -type f |grep -v "haha2" ./haha ./haha1 ./haha3 ./haha4 过滤多个文件,就使用多个"grep -v" [root@localhost kevin]# find . -maxdepth 1 -type f |grep -v "haha2" ./haha ./haha1 ./haha3 ./haha4 [root@localhost kevin]# find . -maxdepth 1 -type f |grep -v "haha2"|grep -v haha3 ./haha ./haha1 ./haha4 [root@localhost kevin]# find . -maxdepth 1 -type f |grep -v "haha2"|grep -v haha3|grep -v haha4 ./haha ./haha1
3)find命令中的-maxdepth和-mindepth:控制搜索深度的选项
-maxdepth :指定遍历搜索的最大深度。最大目录层级
-mindepth: 指定开始遍历搜索的最小深度。最小目录层级
-maxdepth 0:最大目录层级为0,表示只针对当前目录本身(比如/opt/kevin)进行搜索操作或du -sh 统计操作。 -maxdepth 1:最大目录层级为1,表示针对/opt/kevin/ 路径进行搜索操作或du -sh 统计操作。 -maxdepth 2:最大目录层级为2,表示针对/opt/kevin/xxx/ 路径进行搜索操作或du -sh 统计操作。 [root@localhost kevin]# pwd /opt/kevin [root@localhost kevin]# ll total 0 -rw-r--r-- 1 root root 0 Nov 21 18:51 haha -rw-r--r-- 1 root root 0 Nov 21 18:51 haha1 -rw-r--r-- 1 root root 0 Nov 21 18:51 haha2 -rw-r--r-- 1 root root 0 Nov 21 18:51 haha3 -rw-r--r-- 1 root root 0 Nov 21 18:51 haha4 drwxr-xr-x 2 root root 18 Nov 21 18:24 test1 drwxr-xr-x 2 root root 18 Nov 21 18:24 test2 drwxr-xr-x 2 root root 18 Nov 21 18:24 test3 -maxdepth 0 表示最小目录层级是0,即搜索路径它本身 [root@localhost kevin]# find . -maxdepth 0 -type f [root@localhost kevin]# find . -maxdepth 1 -type f ./haha ./haha1 ./haha2 ./haha3 ./haha4 [root@localhost kevin]# find . -maxdepth 2 -type f ./test1/list ./test2/list ./test3/list ./haha ./haha1 ./haha2 ./haha3 ./haha4 超过了实际目录级层,效果是一样的 [root@localhost kevin]# find . -maxdepth 3 -type f ./test1/list ./test2/list ./test3/list ./haha ./haha1 ./haha2 ./haha3 ./haha4 [root@localhost kevin]# find . -maxdepth 4 -type f ./test1/list ./test2/list ./test3/list ./haha ./haha1 ./haha2 ./haha3 ./haha4 如果仅仅只是在/opt/kevin/xxx下搜索,即这里的最小目录深度是2 [root@localhost kevin]# pwd /opt/kevin [root@localhost kevin]# ll total 0 -rw-r--r-- 1 root root 0 Nov 21 18:51 haha -rw-r--r-- 1 root root 0 Nov 21 18:51 haha1 -rw-r--r-- 1 root root 0 Nov 21 18:51 haha2 -rw-r--r-- 1 root root 0 Nov 21 18:51 haha3 -rw-r--r-- 1 root root 0 Nov 21 18:51 haha4 drwxr-xr-x 2 root root 18 Nov 21 18:24 test1 drwxr-xr-x 2 root root 18 Nov 21 18:24 test2 drwxr-xr-x 2 root root 18 Nov 21 18:24 test3 [root@localhost kevin]# find . -mindepth 2 -type f ./test1/list ./test2/list ./test3/list 最小目录层级为0 [root@localhost kevin]# find . -mindepth 0 -type f ./test1/list ./test2/list ./test3/list ./haha ./haha1 ./haha2 ./haha3 ./haha4 最小目录层级为1 [root@localhost kevin]# find . -mindepth 1 -type f ./test1/list ./test2/list ./test3/list ./haha ./haha1 ./haha2 ./haha3 ./haha4 最小目录层级为3,即超过当前最大目录层级,则就搜索不到了! [root@localhost kevin]# find . -mindepth 3 -type f
原文地址:https://www.cnblogs.com/kevingrace/p/11907695.html
- PySide——Python图形化界面入门教程(六)
- Python写的嗅探器——Pyside,Scapy
- 使用sklearn构建含有标量属性的决策树
- 利用Python sklearn的SVM对AT&T人脸数据进行人脸识别
- C/C++网络编程时注意的问题小结
- PHP防止SQL注入的方法
- HTML5离线缓存攻击测试
- IE的BHO通过IHTMLDocument2接口获得网页源代码
- 【C++】小心使用文件读写模式:回车('r') 换行('n')问题的一次纠结经历
- 【C】用C语言提取bmp图片像素,并进行K-means聚类分析——容易遇到的问题
- SEED缓冲区溢出实验笔记
- HTTP严格安全传输(HTTP Strict Transport Security, HSTS)chromuim实现源码分析(一)
- Linux下ls命令显示符号链接权限为777的探索
- Django form表单
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SpringBoot 整合Shiro实现动态权限加载更新+Session共享+单点登录
- 又一个布局利器, CSS 伪类 :placeholder-shown
- 聊聊微前端的原理和实践
- javax.el.PropertyNotFoundException: Property 'XXX' not found on type xx.xx.xx.xx(实体类具体路径)
- java基础知识点总结
- Ajax详解(拓展:利用Ajax实现用户名的校验)
- Maven学习笔记
- com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout 的解决
- 基于VSFTPD技术与KindEditor的简单案例
- Linux下安装JDK1.8、Tomcat、以及MySQL详细介绍(附软件分享)
- Nginx技术(附软件分享)
- (必考)关于JS中this关键字的说法,下面错误的是?
- OA项目总结(附程序源码)
- Redis技术(附软件分享)
- Redis项目案例