shell 命令之 find 命令一

来源:互联网 发布:java 局域网扫描 编辑:程序博客网 时间:2024/06/13 16:42

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
原创粉丝点击