加入收藏 | 设为首页 | 会员中心 | 我要投稿 瑞安网 (https://www.ruian888.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux find命令详解--转

发布时间:2021-02-06 01:21:41 所属栏目:Linux 来源:网络整理
导读:转自:http://blog.csdn.net/jakee304/article/details/1792830 (一)Get Start 最简单的find用法莫过于如此: $?find? . 查找当前目录下的所有文件。 find命令的一般格式为: find?[ - H]?[ - L]?[ - P]?[path ... ]?[expression] 其中,'-H' '-L' '-P'三

有了上面三个选项,你现在应该对文件名的相关匹配得心应手了,对于不是很复杂的查找应该也胜任了。但是看看这个例子,解释一下它在做什么?

$ find . -size +0c -wholename "*e*[0-9]*" -o ! /( -name "." -o -name "*phone" /) -prune? -name "*.c" -user xixi -o -name "*phone"

下面是当前目录下的所有文件:

$ ls -ltotal 224-rw-r--r-- 1 xixi? admin????? 0 2007-11-01 17:34 0dfe.c-rw-r--r-- 1 abc admin????? 0 2007-10-30 15:56 0s8a.txt-rw-r--r-- 1?abc?admin????? 0 2007-11-04 01:00 0TMP123-rw-r--r-- 1?abc?admin???? 73 2007-11-05 15:33 2234.c-rw-r--r-- 1?abc?admin???? 72 2007-11-05 15:34 3e10.c-rw------- 1?abc?admin 224017 2006-03-16 12:16 a_book_of_c.chmlrwxrwxrwx 1?abc?admin???? 15 2007-11-04 11:48 e1000 -> ../e1000-7.6.9/-rw-r--r-- 1?abc?admin???? 70 2007-11-05 14:57 e100.datlrwxrwxrwx 1?abc?admin???? 13 2007-11-05 14:59 e100puk.txt -> phone/puk.txt-rw-r--r-- 1?abc?admin????? 0 2007-11-06 22:21 e680phonedrwxr-xr-x 2?abc?admin???? 37 2007-11-06 22:24 phonedrwxr-xr-x 2?abc?admin???? 20 2007-11-07 01:07 phone1drwxr-xr-x 2?abc?admin????? 6 2007-11-05 15:37 phone2-rw-r--r-- 1?abc?admin???? 67 2007-11-04 12:23 @y38.txtphone$ ls -ltotal 4-rw-r--r-- 1?abc?admin? 0 2007-11-06 22:24 e680gphone-rw------- 1?abc?admin 38 2007-11-05 14:58 puk.txtphone1$ ls -ltotal 0-rw-r--r-- 1 xixi admin 0 2007-11-07 01:07 hello.cphone2$ ls -ltotal 0

要想解决上面的问题就得学习一下find中的逻辑运算符。逻辑运算符主要有以下几个,按照优先级从高到低的顺序如下:?( expr )

括号优先级最高,首先对括号内的求值

?! expr

对expr表达式的值取反

?-not expr

同上,但是POSIX不支持

?expr1 expr2

不加任何运算符,相当于两个之间加and,即与运算,两个表达式值都为true整个才返回true。先对expr1表达式求值,若为false,则不对expr2求值。

?expr1 -a expr2

同上

?expr1 -and expr2

同上,但是POSIX不支持

?expr1 -o expr2

表示对expr1和expr2两个表达式的值求或,左右两个值只要有一个为ture,整个表达式就是true。先对expr1表达式求值,若为ture,则不对expr2求值。

?expr1 -or expr2

同上,但是POSIX不支持

?expr1,expr2

逗号表达式。expr1和expr2都会求值,但是只返回expr2的值,expr1的值会被丢弃

正是因为有一个求值的顺序,所以你才有可能见到这样的写法:

linux find命令详解--转"*.txt"?-o?-print

表示,如果表达式-name "*.txt"为真,就不再执行另一个表达式-print,即查找所有不是以.txt结尾的文件。再有,要查找当前目录下,文件名中包括字母'e',在'e'之后又有数字的不是目录文件的所有文件,可以这么写:

linux find命令详解--转find . -name?"*e*[0-9]*"?! -type d?-print

linux find命令详解--转./e1000

linux find命令详解--转./e100.dat

linux find命令详解--转./e100puk.txt

linux find命令详解--转./3e10.c

大家可以自己多举几个例子试一下。

(六)-prune

-prune是一个动作项,它表示当文件是一个目录文件时,不进入此目录进行搜索。要理解-prune动作,首先得理解find命令的搜索规则(也可以说find命令的算法)。find命令递归遍历所指定的目录树,针对每个文件依次执行find命令中的表达式,表达式首先根据逻辑运算符进行结合,然后依次从左至右对表达式求值。以下面代码为例,进行说明

linux find命令详解--转

(1)?根据OPT1设置项进行find命令的整体设置,若没有-depth设置项,依次进行下面的步骤(2)?令文件变量File =?PATHP1(3)?对File文件进行TEST1测试,若执行结果为false,转(8)(4)?对File文件进行ACT1动作,若执行结果为false,转(8)(5)?对File文件进行TEST2测试,若执行结果为true,转(7)(6)?对File文件进行TEST3测试,若执行结果为false,转(8)(7)?对File文件进行ACT2动作(8)?若File文件是一个目录,并且没有被执行过-prune动作,则进入此目录(9)?当前目录下是否还有文件,若有依次取一个文件,令File指向此文件,转(3);(10)?判断当前目录是否是PATHP1,若是则程序退出;若不是,则返回上一层目录,转(9)理解了上面的流程,那么不难理解下面的代码为什么只输出一个'.'

linux find命令详解--转(编辑:瑞安网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读