天天看点

Find用法总结

1、按文件名查找

find 目录路径 -name 文件名|通配符

2、按大小查找

find 目录路径 -size 1500c 查找文件大小为1500bytes的文件,字符c 表示单位是bytes;

find 目录路径 -size +10000c "+"表示系统只列出大于指定大小的文件,“-”表示小于

find 目录路径 -empty 查找系统中为空的文件[夹]

size:表示文件大小,+表示大于某个数,-表示小于某个数。c表示单位是字节,你可以将c换成k,M,G

3、按时间查找

find / -amin -10 # 查找在系统中最后10分钟访问的文件

find / -atime -2 # 查找在系统中最后48小时访问的文件

find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件

find / -mtime -1 # 查找在系统中最后24小时里修改过的文件

find / -cmin -5 # 查找在系统中最后5分钟里被改变状态的文件

find / -ctime -1 # 查找在系统中最后24小时里被改变状态的文件

访问过用amin,修改过用mmin,文件状态改变过用cmin

精确到分钟的用amin,mmin,cmin,精确到天的用atime,mtime,ctime

在5分钟之内的用-5,在5分钟以前(以上)的用+5

4、按用户查找:

find / -user fred # 查找在系统中属于FRED这个用户的文件

find / -group cat # 查找在系统中属于 groupcat的文件

find / -nouser # 查找在系统中属于作废用户的文件

find / -not -user reda #查找在系统中不属于FRED这个用户的文件

find / -gid 501 #查找系统中属于组id为501的文件

find / -false #查找系统中总是错误的文件

find / -type b

文件类型:

b 块(缓冲)设备

c 字符设备

d 目录

p 有名管道(FIFO)

f 规则文件

l 符号链结

s SOCKET

5、通过文件特征进行查找

-false 查找系统中总是错误的文件

-fstype type 查找系统中存在于指定文件系统的文件,例如:ext3

-depth 通过文件深度进行查找

-follow 根据软连接方式进行查找(默认情况下对连接不进行查找)

6、组合方式:

find /tmp -size +10000000c -and -mtime +2 # -and

find / -user fred -or -user george # -or 在/tmp目录中查找属于fred或者george这两个用户的文件

find /tmp ! -user panda // ! 在/tmp目录中查找所有不属于panda的文件

另一种写法:

find /tmp ! \( -user 0 -o -user 500 -o -user 501 \) -exec ls -l {} \;

find /data/dbk/ ! -type b -ctime +5 \( ! -iname ".*" ! -iname "dbk" \) -exec rm -rf {} \; (-iname 忽略大小写)

find / -name "httpd.conf" -ls #查找并显示文件的方法

find . -name * -exec rm -f {} \;

-exec 参数后面跟的是 command命令,注意如下几点:

command命令的终止,使用 ';' (分号)来判定,在后面必须有一个 ';'

';'需要用'\'来转义 ,所以命令整体形式为: -exec rm -f {} \;

'{}',使用{}来表示文件名,也就是find前面处理过程中过滤出来的文件,用于command命令进行处理

find / -exec grep "Hello" {} \;查找所有包含 hello 字符的文件

7、find 与exec xargs 是常用组合

在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就

会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去

在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题

因而效率不高;而使用xargs命令则只有一个进程。

find . -name \* -type f -print | xargs grep "hostnames" \用来取消find命令中的*在shell中的特殊含义。

在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!

可以使用安全模式:

-ok command; 给用户命令执行操作,根据用户的Y 确认输入执行

find . -name "*.conf" -mtime +5 -ok rm { } \;

8、按权限查找

find ~ -type f -perm 4755 -print #查找$HOME目录下suid位被设置,文件属性为755的文件打印出来。

find . -perm -007 -print

9、忽略某个目录

find /apps -name "/apps/bin" -prune -o -print 在/apps目录下查找文件,但不希望在/apps/bin目录下查找

10、查找比某个文件新或旧的文件

find . -newer age.awk ! -newer belts.awk -exec ls -l {} \;

find命令能够查找更改时间比文件age.awk新但比文件belts.awk旧的文件:

本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/1307732,如需转载请自行联系原作者