2014年5月11日星期日

Linux_040:常用命令之十一:find

find命令除了可以搜索指定目录中的文件之外,还可以对这些文件执行指定的操作。
命令格式:find pathname [options] [-print -exec -ok ...]

1. 查找当前目录(包括子目录)匹配关键字的文件
(1)find . -name "*.log"
在当前目录(包括子目录)查找以.log结尾的文件。
(2)find . -name log
在当前目录(包括子目录)查找名称为log的目录。

2. 查找指定时间内修改过的文件 
例子:find -atime -2
查找系统中48小时内被访问过的文件。
例子:find . -mmin 1
查找当前目录下1分钟之内被访问过的文件。
参数说明如下:
(1)-amin n   查找系统中最后n分钟访问的文件。
(2)-atime n  查找系统中最后n*24小时访问的文件。
(3)-cmin n   查找系统中最后n分钟被改变件状态的文件。
(4)-ctime n  查找系统中最后n*24小时被改变文件状态的文件。
(5)-mmin n   查找系统中最后n分钟被改变文件数据的文件。
(6)-mtime n  查找系统中最后n*24小时被改变文件数据的文件。
(7)- n表示文件更改时间距现在n(分钟/天)以内,+ n表示文件更改时间距现在n(分钟/天)以前。

3. 按文件大小查找文件 
(1)find . -size +1000000c –print
在当前目录下(包括子目录)查找文件大小大于1 M字节的文件。
(2)find . -size 100c –print 
在当前目录下(包括子目录)查找文件大小恰好为100字节的文件。
(3)find . -size -1000c –print
在当前目录下(包括子目录)查找文件大小小于1K的文件。
(4)find . -type f -size +1000000k 
在当前目录下(包括子目录)查找文件大小大于1G的文件。

参数说明:
(1)数字n不带c时,表示文件长度以块计,1块=512字节。
(2)数字n带c时,表示文件长度以字节计。
(3)数字n带k时,表示文件长度以千字节计。

4. 按Tree的方式显示当前目录下的目录(包括子目录)
这是经常会用到的一个功能,单独总结在这里:find . -type d | sort

5. 与-exec一起使用
-exec: find命令对匹配的文件执行该参数所给出的shell命令。
相应命令的形式为'command' {  } \;,注意{   }和\;之间的空格。
(1)find ./dir1 -type f -mtime -1 -exec rm {} \;
查找并删除dir1目录下更改时间小于一天的文件。
(2)find ./src -name '*.ec' -exec grep -i niuc {} \; -print
查找src目录下,包含niuc(-i 表示忽略大小写)的所有文件名以.ec结尾的文件。

6. 与xargs一起使用
与-exec一起使用时, find命令将所有匹配到的文件一起传递给exec执行。
但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。
这就是xargs命令的用处所在,特别是与find命令一起使用。
xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。
这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

(1)find . -type f -print | xargs file
查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件。
如果提示:xargs: file: Argument list too long,可以使用如下命令:
find . -type f -print | xargs -n 20 file
(2)find / -name "core" -print | xargs echo "" >/tmp/core.log
在整个系统中查找内存信息转储文件(core dump),然后把结果保存到/tmp/core.log 文件中。

参考文献:
1. http://www.cnblogs.com/peida/archive/2012/11/13/2767374.html
2. http://blog.csdn.net/wirelessqa/article/details/11866987
3. http://www.cnblogs.com/peida/archive/2012/11/15/2770888.html
4. http://superuser.com/questions/628650/how-can-i-avoid-the-grep-argument-list-too-long-error

没有评论: