linux find命令详解--转
有了上面三个选项,你现在应该对文件名的相关匹配得心应手了,对于不是很复杂的查找应该也胜任了。但是看看这个例子,解释一下它在做什么? $ 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的值会被丢弃正是因为有一个求值的顺序,所以你才有可能见到这样的写法:
表示,如果表达式-name "*.txt"为真,就不再执行另一个表达式-print,即查找所有不是以.txt结尾的文件。再有,要查找当前目录下,文件名中包括字母'e',在'e'之后又有数字的不是目录文件的所有文件,可以这么写:
大家可以自己多举几个例子试一下。 (六)-prune
(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)理解了上面的流程,那么不难理解下面的代码为什么只输出一个'.' ![]() 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |