shell 命令之 find 命令一
2015-12-17 11:30
519 查看
linux find 命令一:史上最详细
首先find命令与locate命令不同,find命令是一个最忠实,最老实的命令,它会一丝不苟的在磁盘上进行查找,直到找到符合条件的,或者查找完磁盘。同时find命令也有许多非常实用的用法,灵活的搭配各种附加参数,能十分方便的查询。
首先最基本的命令模式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 -na 4000 me "*.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匹配文件名
相关文章推荐
- Linux socket 初步
- android wifi 无线调试
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户