文件查找命令find

日期: 2015年08月30日


文件查找:在文件系统上查找符合条件的文件的过程


Linux系统上常用的两个文件查找工具:

locate:

依赖于实现构建的索引,索引的构建是在系统较为空闲时自动进行(周期性任务)生成的。

必要时,可手动执行updatedb命令

优点:速度快

缺点:非实时查找、模糊查找

find:

通过遍历指定的目标目录,实时查找符合指定实属性的文件

优点:实时查找、精确匹配

缺点:遍历文件系统、速度慢



find命令


格式:

find [OPTIONS] [查找路径] [查找条件] [处理动作]

查找路径:默认为当前路径

查找条件:默认为指定路径下的所有文件

处理动作:默认显示到屏幕



查找条件:

根据文件名查找:

-name  "文件名",文件名支持使用globbing

# find /etc/ -name "passwd*"#在/etc目录下搜索名为passwd的文件

-iname  "文件名" 不区分大小写

-regex 'PATTERN',以PATTERN匹配整个文件路径字符串,而不仅仅是文件名



根据文件的属主或属组查找:

-user USERNAME:  根据文件属主查找

-group GROUPNAME:  根据文件属组查找



根据文件的属主或属组的ID号查找:

-uid  UID:  根据指定的UID查找

-gid  GID:  根据指定的GID查找



查找没有属主或属组的文件:

-nouser:  查找没有属主的文件

-nogroup:  查找没有属组的文件



组合查找条件:

组合多个条件查找运用逻辑运算:与、或、非

:-a  查找条件1 -a 查找条件2 -a ... (-a可省略)

所有条件必须同时满足

# find /tmp/ -nouser -a -name "*centos*"


:-o  查找条件1 -o 查找条件2 -o ...

满足其中一个条件即可

# find /tmp/ -name "*centos*" -o -uid 500


:-not or !

-not 查找条件不满足指定条件的(相反)

# find / -not -user root | xargs ls -ld

# find / ! -user root | xargs ls -ld




: 重叠部分:既属于A,又属于B

或: A+B-重叠部分(减去与的部分)

非: 除A之外,或除B之外


 

!A  -o !B

=  

!(  A -a B )

!A  -a !B

=  

!( A -o B )

 

 


实例1

//查找/tmp/下非php与非txt结尾的文件

# find /tmp -not -name "*php" -a -not -name"*txt"

 

//查找/tmp/下非php或非txt结尾的文件

# find /tmp -not \( -name "*.php" -o -name"*.txt" \)

 

 

根据文件类型查找:

-type 文件类型

f  普通文件

d  目录文件

l  符号链接文件

b  块设备

c  字符设备文件

p  命名管道文件

s  套接字文件

 

 

根据文件大小查找:

-size [+|-] #UNIT

常用单位有:k,M,G

不带+|- 表示精确匹配

 

实例1

 

//查找/etc目录下2k的文件

#UNIT: #-1 < x <= #

find /etc/ -size 2k -exec ls -lh {} \;

(2k: 匹配范围是1.1k - 1.9k)

 

//查找/etc目录下-2k的文件

-#UNIT: x <= #-1

find /etc/ -size -2k -exec ls -lh {} \;

(-2k: 匹配范围是小于等于1k)

 

//查找/etc目录下+2k的文件

+#UNIT: x >#

find /etc/ -size +2k -exec ls -lh {} \;

(+2k: 匹配范围是大于2.1k以上)

 

 

根据时间戳查找:(过去的某个时间节点)

以“天”为单位

-atime [+|-]#: 根据访问时间查找

-mtime [+|-]#: 根据修改时间查找

-ctime [+|-]#:  根据改变时间查找

 

实例2

//查找/etc目录下访问时间为3天的文件

#: # =< x < #+1

find /etc/ -atime 3 -exec stat {} \;

(3: 匹配范围是从3天 - 4天之间)

 

//查找/etc目录下3天之内访问过的文件

-#: x < #

find /etc/ -atime -3 -exec stat {} \;

(-3: 匹配范围是小于3天之内的)

 

//查找/etc目录下3天以前访问过的文件

+#:# x >= #+1

find /etc/ -atime +3 -exec stat {} \;

(+3: 匹配范围是等于或大于3天以上的)

 

以“分钟”为单位

-amin [+|-]#:  根据访问时间查找

-mmin [+|-]#:  根据修改时间查找

-cmin [+|-]#:  根据改变时间查找

 

find /tmp/ -amin -5 查找范围是小于5分钟内

find /tmp/ -mmin +5 查找范围是大于或等于5分钟以上

 

 

根据权限查找:

-perm [+|-]MODE

MODE: 不带+|- 表示与MODE精确匹配

find /etc/ -perm 644 查找权限为644的文件

 

+MODE: 任何一类用户的权限只要能包括对其指定的任何一位权限即可

find /etc/ -perm +555 任何一类用户有任何一位权限即匹配

 

-MODE: 每一类对象指定的每一位权限都必须同时存在方为符合条件;隐含与条件。

find /etc/ -perm -111 -ls 查找所有人都有执行权限

find /etc/ -perm -222 -ls 查找所有人都有写权限

find /etc/ -perm -666 -ls 查找所有人都有读和写权限

 

权限计算:

3=2+1

4=read

5=4+1

6=4+2

7=4+2+1

 

处理动作:

-print  默认动作:打印至屏幕

-ls  显示找到的文件的详细属性

-exec COMMAND {} \; 对找到的文件执行期望的操作

删除/tmp下没有属组的文件

find /tmp -nogroup -a -type f -exec rm {} \;

-ok        COMMAND {}\;  执行命令之前提示确认

 

注意:

find命令会一次性找到所有符合条件的文件,并一同传递给后面的命令;但有些命令不能接收过长的参数

解决办法: find | xargs COMMAND

 

你可能感兴趣的:(find,文件查找)