2015.11.07_07_03_Linux文件查找详解

本文详细介绍了 Linux 下 find 命令的使用方法,包括如何根据文件名、属主、文件类型、大小和时间戳等条件进行精确查找。同时,还提供了 find 命令与其他命令结合使用的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

grep,egrep,fgrep是查找文本的,是查找字符串的。
它能在文件中查找文本。
而文件查找则需要别的工具:locatefind
locate: 在全系统查找文件,非实时,因为它的查找是根据全系统文件数据库完成的。linux系统只要在运行,它每天都会运行一个计划任务,该任务会把系统中所有的文件名保存到一个数据库中。而locate就是在该数据库中查找文件,并且是模糊查找,只需要文件的全路径名中包括要找的文件名,就算匹配。该数据库,也可以通过执行命令手动生成:updatedb。它会收集系统中所有文件的信息。因为它是直接在数据库中查找,所以它的速度快。
但是因为它的非实时性及模糊性,这个命令用的并不多。

find: 实时、精确、遍历指定目录中所有文件完成查找,速度慢。
而且find支持众多的查找标准,比如根据文件名查找,根据文件权限查找、根据文件类型查找,还能根据正则表达式匹配文件名。
命令格式:
find 查找路径 查找标准 查找到以后的处理运作
查找路径:可以省略,省略则表示当前目录。
查找标准:默认为指定路径下的所有文件。
处理运行:默认为显示文件的路径
例如:在当前目录下运行find,则会把当前目录下的文件,包括隐藏文件全部列出来。
查找路径
查找路径比较简单,而查找标准则很复杂。
查找规则
查找标准也叫匹配规则:
-name ‘filename’ : 对文件名做精确查找。查找文件名为指定名称的文件,必须要求文件名完全匹配,且区分大小写。
如:

[root@redhat5u5 ~]# find /etc -name ‘passwd’
/etc/uucp/passwd
/etc/passwd
/etc/pam.d/passwd

当然它也支持通配符:

*: 任意长度的任意字符,包括0个字符。
?: 匹配1个字符。
[]: 匹配中括号中的任意一个字符

-iname ‘filename’: 文件名匹配时不区分大小写。
-regex PATTERN : 基于正则表达式进行文件名匹配。
-user username : 根据文件是属于哪个user来查找
-group groupname: 根据属组查找
-uid UID : 根据UID查找
-gid GID: 根据GID查找
-nouser : 查找没有属主的文件
-nogroup:查找没有属组的文件
-type 根据文件类型查找

f: 普通文件
d: 目录
c: 字符设备
b: 块设备
l: 链接文件
p: 管道设备
s: 套接字设备

如:find -type d

-size 指定文件大小查找

查找的时候,-size后面跟着文件大小的数字和单位,M表示兆,G表示GB,小写的k表示kB,不跟单位的话,则表示字节。如:-size xxM
还可以添加[+|-]在数字的前面,表示大于还是小于指定的指定的大小。如:-size +xxM
find /etc -size 1M 这个命令会找到很多不是1M大小的文件。这是因为,零点几M的文件,会被当做1M的文件。比如找10M的文件,那么9点几M的文件,会被当做10M的。
而在find命令后面,添加-ls 会列出查找到的文件的详细信息。

find /etc -size 10k -ls
2941988 16 -rw-r–r– 1 root root 9260 Feb 12 2009 /etc/htdig/htdig.conf
2940747 16 -rw-r–r– 1 root root 9828 Mar 12 2010 /etc/pki/tls/openssl.cnf
2941394 16 -rw-r–r– 1 root root 9260 Oct 7 2006 /etc/pam_pkcs11/pam_pkcs11.conf
2940636 16 -rwxr-xr-x 1 root root 9966 Nov 19 2009 /etc/rc.d/init.d/cpuspeed
2942773 16 -rw-r–r– 1 root root 9832 Oct 19 2006 /etc/gconf/schemas/gconf-editor.schemas
2941254 16 -rw-r–r– 1 root root 9733 Jan 23 2010 /etc/samba/smb.conf
2942452 16 -rw-r–r– 1 root root 9685 Jan 7 2010 /etc/xdg/autostart/puplet.desktop

以上条件,还可以进行组合

-a
-o
-not
如果给定了2个条件,而没有给定组合方式,默认是逻辑。
组合参数要放在2个条件之间:find /etc -nouser -o -type d
-not 要放在条件之前,比如非目录的:find /etc -not -type d
把2个非 再与起来的操作:find /tmp -not -type d -a -not -type s
组合这些条件,也可以使用括号:
find /tmp -not \(-user user1 -o -user user2\)
括号要使用反斜杠进行转义。

根据文件的时间戳查找:

-mtime:修改时间
-ctime: 改变时间
-atime: 访问时间
这3个参数后面跟数字,表示天。而且可以使用[+|-]在天数之前。如果不使用+-,则表示离今天刚好5天,+号表示5天之前,也就是离现在至少5天了,大于5天,-号表示5天以内,少于5天。

与此对应的,还有表示分钟的一组参数:

-mmin
-cmin
-amin

-perm MODE : 根据权限查找,精确匹配mode,每一位都要匹配上,权限共有9位。
还有+mode,-mode,/mode。+mode和/mode表示一个意思。
find ./ -perm 644
/mode :只要有一位匹配就好,任意一位满足条件。find ./ -perm /644
-mode:每一位都必须匹配,文件权限能完全包含此MODE时才能显示。
find ./ -perm -001 : 查找其他用户有执行权限的文件

动作

-print : 默认是显示出来
-ls: 类似ls -l的形式显示每一个匹配到的文件
-ok COMMAND \; COMMAND表示要执行的命令,并且必须要以\;结尾,否则被认为语法错误。
如果需要引用这个文件的话,则使用{}表示占位符:-ok COMMOND {} \;
-exec COMMAND {} \; 同上,区别是,-ok 的每一个命令,都需要用户确认。
find ./ -perm -004 -exec chmod o-w {} \;

find ./ -name "*.sh" -a -perm -111 -exec chmode o-x {} \;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值