shell 命令之 find 命令一

linux find 命令一:史上最详细

首先find命令与locate命令不同,find命令是一个最忠实,最老实的命令,它会一丝不苟的在磁盘上进行查找,直到找到符合条件的,或者查找完磁盘。同时find命令也有许多非常实用的用法,灵活的搭配各种附加参数,能十分方便的查询。
  1. 首先最基本的命令模式
 find path [option] pattern #path,为要查询的路径,option为附加参数(可选) pattern为要匹配的模式条件,可以用通配符和正则,具体详细用法见下面用法
find . -name "*.txt"  # . 表示当前路径对应path,-name 为附加选项参数, "*.txt"表示为匹配的条件,*是通配符,合起来表示查找当前路径下所有文件名带.txt的文件

2 . 当我们要查找的条件不止一个时,我们可以怎么做呢?举个例子,我们希望查找所有的文件名以.txt或者.pdf结尾的文件时该怎么做?

我们可以利用 -o 参数来实现条件的或连接,然后把所有的条件作为一个整体传给find命令,具体如下:
find . \( -name "*.txt" -o -name "*.pdf" \)
/*
我们解释下上面的命令  因为()这里表示特殊含义,表示把所有的条件括起来作为一个整体,所以用\进行转义,避免把()作为普通字符
-o 连接多个条件,表示逻辑或(or),同时也可以使用 -a 表示逻辑与 (and)
关于判断条件的知识,请参考我之前的文章,稍后给出链接
*/

3专业匹配路径的还有-path,-path 表示以普通字符串匹配路径,可以用通配符。

 find /home/users -path "*/slynux/*"   (此不具有普遍性,很可能执行完输出没有usres目录)
 则会输出slynux目录下所有的文件,并且带上全路径输出。总之 -path 表示把模式作为路径的一部分进行搜索。

4。 默认情况下,find命令会在给出的路径下面递归(recursively)的查找,也就是说会遍历指定路径下的所有子路径,以及子路径的子路径……,愚公移山似的子子孙孙无穷尽也……。
但是我们有时不想让它这么做,我们可以指定搜索的层次

-maxdepth 和-mindepth 参数分别表示搜索的最大层次和最小层次,或者说最大深度和最小深度
具体:

比如我们只搜索指定路径下,而不是子目录下的内容
find . -maxdepth 1 -name "*.txt" # 就只会在.下搜索。

find . -mindepth 3 -name "*.txt" #就会往下搜索3个深度的子路径,也许就是 ./first/second/third/text.txt也会搜出来,当然如果上述路径和文件存在的话

5。 有目的性的,排除对某个子目录的查询
比如:我们使用git管理工具时,相关的每个目录下都有一个.git目录,当我们查找时,我们希望跳过查找.git目录,以加快速度,因为.git目录不可能有我们要找的东西

主要选项参数: -prune。
-prune

find . \( -name ".git" -prune \) -o \( -name "*.py"  \)
# 首先\(  -name ".git" -prune \) 中的-name 表示的是目录名为.git的目录,而后面的 -name "*.py" -name 则表示文件名
造成这里的区别就是因为 -name ".git" -prune 这个-prune ,因为-prune是排除指定的目录,所以这里的-name匹配目录名,其他场景-name匹配文件名
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值