linux命令详解(21)用find查找文件,find命令详解

2014-12-23 17:18:07     7 人阅读    

用find查找文件
         locate问世之前,用户主要使用find命令查找文件。locate查找文件的速度更快,不过根据属性而非名称查找文件时,find提供的选项更多、更强大。
         注意 搜索整个文件系统可能会花费很长时间。搜索整个文件系统之前,不妨先搜索文件系统的某个子集,或者排除某些特定目录或远程挂载的文件系统。
下面的示例会递归搜索整个根文件系统(/),查找名为e100的文件:

$ find / -name "e100*" -print
find: /usr/lib/audit: Permission denied
find: /usr/libexec/utempter: Permission denied
/sys/module/e100
/sys/module/mii/holders/e100

普通用户运行find时可能会产生大量“无权访问”(Permission denied)提示信息,原因是find试图进入用户不能访问的目录。用下面的命令行可以滤除不能访问的目录:

$ find / -name e100 -print 2>&1 | grep –v "Permission denied"

或者将所有错误发送至/dev/null位元桶:

$ find / -name e100 -print 2> /dev/null

find查找文件时区分大小,且搜索结果与要查找的文件名必须完全一致(e100与e100.ko并不匹配),不过搜索时可以使用正则表达式,以便找到尽可能多的结果。示例如下:

$ find / -name 'e100*' -print
/lib/modules/2.6.20-1.2982.fc7/kernel/drivers/net/e1000

此外还可以根据时间戳查找文件,下面的命令行查找/usr/bin/目录下过去两分钟内访问过的文件:

$ find /usr/bin/ -amin -2 -print
/usr/bin/
/usr/bin/find

下面的示例则查找/home/chris目录下过去60天里未访问过的文件:

$ find /home/chris/ -atime +60

使用-type d选项可以查找目录。下面的命令行会找出/etc下的所有目录,同时将stderr重定向至位元桶(/dev/null):

$ find /etc -type d -print 2> /dev/null

下面的命令行查找/sbin目录下权限为750的文件:

$ find /sbin/ -perm 750 –print

find的exec选项非常强大,通过该选项,用户可以进一步处理find命令查找到的文件。下面的命令查找/var下用户francois(必须为有效用户)所属文件,并对每个文件执行ls -l命令:

$ find /var -user francois -exec ls -l {} \;

find命令exec选项的替代方案是xargs:

$ find /var -user francois -print | xargs ls -l

上面这两个命令在具体操作上区别较大,性能差异也非常明显。find -exec会对每个找到的结果调用一次ls命令,而xargs命令则是将大量结果作为输入传给一个ls命令,显然效率更高。
搜索条件前面加上叹号(!)可以对搜索条件取反。下面这个例子首先查找不属于root用户组的所有普通文件,然后对这些文件执行ls -l命令:

$ find / ! -group root -type f -print 2> /dev/null | xargs ls -l

下面的例子查找/sbin目录里其他用户不可执行的普通文件,并将查找结果传给ls -l命令:

$ find /sbin/ -type f ! -perm /o+x -print | xargs ls -l
-rwxr-x--- 1 root root 295884 2007-03-02 17:44 /sbin/audispd
-rwxr-x--- 1 root root  88024 2007-03-02 17:44 /sbin/auditctl

要确定哪些文件占用大量硬盘空间,按尺寸查找文件是个不错的选择。下面的命令行查找所有大于10 MB(+10M)的文件,从大到小列出这些文件的详细信息(ls -lS),并将结果保存至文件/tmp/bigfiles.txt:

$ find / -xdev -size +10M -print | xargs ls -lS > /tmp/bigfiles.txt

上面的示例在搜索时加上-xdev选项,排除所有挂载的文件系统,包括根文件系统在内。这样一来,find命令就不用搜索/proc目录和本地及远程挂载的文件系统。

上面运行的file命令表明,bash shell提供了多种格式的文档文件。file命令会查看文件内容,确定文件是否包含troff标记(


原文地址:http://www.itmmd.com/201412/368.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android学习笔记(24)日期、时间选择框(DatePicker和TimePicker)的功能和用法   上一篇
下一篇  大型网站架构设计-垂直化搜索引擎

精彩回复
发表评论
姓名:       

《程序员app》专门为程序员量身定做!