下载:
http://vdisk.weibo.com/s/ypqVA/1366517349
参考:
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2020461
Find
1.大小
-szie n[cwkMG]
Size这个东西是这样,默认的单位是块,一个块是512字节。c是字节,k是1024字节,M是1024k,G是1024M,w是两个字节。
-size 1k :表示大于0,小于1024字节的所有文件。
-size -1k:只有空间为0的空文件才会出现了。
-size 3M:占用空间大于2M,小于等于3M的将会出现。
-size 1G:比1G小的非空文件多会出现。
-size 1M和-size 1024k区别很大:前者表示大于零,小于等于1M的文件,后者表示大于1023k,小于等于1024k的所有文件。精确度差很多。
+n或者-n,都是开区间,不包括那个n值的。
-empty:与-size 0 的区别在于,空目录不包含任何东西,所以size为零,但是目录如果不空,也可能size为零。如a/b,b是一个空目录,结果a、b的size都是零,但是a不是空目录,因为他下面有b。
2.时间
-atime :访问时间。可以是-atime 3,-atime -3或者-atime +3
单位是24小时。0,1,2对应的时间点如下:
| 3 | 2 | 1 | 0 |
| <-- NOW
+、-都是表示开区间,不包含的。
要查看1天之内访问过的文件:
-atime 0
查看距离现在1*24小时--3*24小时之间访问过的文件:
-atime +0 -atime -4
N 对应 (N-1)*24小时 ~ N*24小时的区间
-mtime道理类似,m表示修改。-ctime也一样,c表示改变文件状态。
还有-amin,-cmin,-mmin,只是把单位换成分钟,精确度上来了。
另外还有-newer file,表示比file的修改时间更新。-anewer表示访问时间更新,-cnewer表示改变状态更新。注意:! newer a 时,a本身也会返回,因为他不比自己更新。
3.权限
-perm 755:精确匹配
-perm -644:为1的位,一定要用,为0的位,可有可不有。所以,三个位置,实际上,第一个位置大于等于6,第二个位置大于等于4,第三个位置大于等于4的都行。
小注意:ls似乎不接受管道,如果find . -print | ls -l,那么跟ls -l木有区别。因此只能用exec来做。
4.mount
-mount要加在目录名之后,expression的开头,然后接test和action。表示不跨越文件系统。
5. depth深度优先
跟mount一样,也是放在前面。不过似乎默认就是深度优先的。
6.-name 文件名。
支持*和?通配符。也支持[a-z]
7. -type
b c d l s f p
8.用户和组
-user chen
-group chen
-nouser
-nogroup
9.maxdepth和mindepth
-maxdepth 1 不深入子目录,只在当前目录
-maxdepth 2在子目录中找,但不在当前目录找
跟mount和depth一样,也要放前面
10.fstype
-fstype ddd 指定文件系统
11. 连接数
-links n
-links +n
-links -n
12. prune
prune是一种action
在find的expression中,分为option,test和action
Option如mount,depth,maxdepth和mindepth
Test如-name,-size
Action如prune,print
Option永远返回true,test和action可能true可能false
prune这个action的特点是:什么都不干,但是返回true
所以,如果不想要某一个部分,就 用 -conditon过滤,然后用-prune。如 -condition -prune -o -print。这样,符合-condition的就去执行prune,于是什么也不干,返回true,把后面的print短路了。不符合-condition的,就直接返回false,所以去执行了print。
如:去掉所有包含a的文件和目录:
忽略某一目录,不在那个目录中查找:
-path “./test5”:如果是./test5则返回true,否则返回false。
忽略多个目录:
实际上这个例子给出了与或非逻辑运算优先级的表示方法,就是用(),但是要用\来转义,而且括号跟中间的内容直接一定要用空格!
13. 与或非
-a
-o
!
支持短路
14.自动action
如果没有指定action,就好自动加上print;如果action只有prune,也会加上prune。
这样,似乎-print和 -prune -print没什么区别: