find命令过滤 no such_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/*

./tes


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部