功能强大的find命令

find是Linux系统管理员所喜好用的必备工具之一,它能够很轻松地找到你想要的文件。

【功能】shell

查找文件,可遍历指定目录按相应的条件查找所须要的文件安全

【语法】socket

find [查找路径……] [查找条件] [处理动做]ide

(1)查找路径工具

默认为当前目录,也能够遍历整个文件系统oop

运行以下三个 find 命令将获得相同的结果 — 当前目录和全部子目录中的全部文件(包括隐藏文件)的完整清单:性能

#find ui

#find .blog

#find . -print进程

(2)查找条件

1)按文件名查找: -name

支持使用通配符查找:* 、?、[ ]

[举例]

p_w_picpath

查找时注意文件名区分大小写

-iname选项:不区分大小写进行查找

2)按文件属主、属组查找

-user 用户名

-group 组名

find命令也支持使用uid和gid进行查找

-uid

-gid

find命令也能够查找“无主(组)”的文件

-nouser (文件的属主在/etc/passwd中不存在)

-nogroup(文件所属的组在/etc/group中不存在)

[举例]

find /var/log -user root -group utmp

3)按文件大小查找

-size [+/-] n[cwbkMG]

+表示大于的意思

-表示等于的意思

文件大小的单位能够是:

b——数据块

c——字节

w——双字节

k——KB 

M——MB

G——GB

-empty 文件大小为0

[举例]

-size +2M 大于2M的文件

-size -2M 小于2M的文件

-size 2M 2M(1-2M之间的文件都是)

p_w_picpath

4)按文件类型查找

-type 文件类型

文件类型能够是:

-f 普通文件

-d 目录

-b 块设备

-c 字符设备

-p 命名管道

-l 连接

-s socket文件

[举例]

find /etc/ -type d

5)按文件时间属性查找

 

  • 以天为单位

1. –mtime [+/- n]——指定时间范围内文件内容被修改过

2. –ctime [+/- n]——指定时间范围内文件属性被修改过

3. –atime [+/- n]——指定时间范围内文件被读取或访问过

  •  以分钟为单位

1. –mmin [+/- n]——指定时间范围内文件内容被修改过

2. –cmin[+/- n]——指定时间范围内文件属性被修改过

3. –amin [+/- n]——指定时间范围内文件被访问过

理解查找时间

p_w_picpath

[举例]

find /var/log/ -type f -mtime +3 #在/var/log目录下查找3天之前被修改过的文件

find ./ -mmin +5 -mmin 10 #搜索当前目录下前5分钟到10分钟修改过的文件

6)按文件权限查找

-perm 模式,权限模式有如下几种:

mode:精确匹配

/mode: 任何一位匹配都行

-mode:文件权限能彻底包含mode时才算匹配

+mode:一种旧的匹配方式,和/mode模式效果同样,建议使用/mode模式代替

[举例]

p_w_picpath

p_w_picpath

 

 

7)组合条件查找

在使用find命令时,也可以使用多个条件组合进行查找,查找条件之间的逻辑关系有如下三种:

  • 与:-a 缺省

  • ?或:-o

  • 非:!,-not(运算优先级最高)

[举例]

find / -type f -a -name '*.sh'与find / -type f -name '*.sh'效果同样,都是在整个文件系统中查找以.sh结尾的文件

find /tmp ! -user hadoop -a ! -empty

find /tmp -not \( -user hadoop -o -empty \)

find /tmp ! -user hadoop -o ! -empty

find /tmp ! \( -uesr hadoop -a -empty \)

find / -nouser -o -nogroup

find / \( -perm -2000 -o -perm -4000 \) -ls

8)其余选项

-depath选项

先匹配全部的文件,再在子目录中查找

-maxdepth级别

定义find遍历目录的层次

p_w_picpath

-fstype 指定查找的文件系统类型

(3)处理动做

find命令对查找匹配的文件有四个处理动做:

  • -print:将匹配的文件输出到标准输出

  • -ls:相似ls -l的形式显示每个文件的详细信息

  •  -exec command {} \;

对匹配的文件执行相应的shell命令,{}占位符表明匹配的文件,注意{}和;之间的空格

  • -ok command {} \;

-ok和-exec的做用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每个命令以前,都会给出提示,让用户来肯定是否执行。

[举例]

find ./ -type f -size 0 -exec rm {} \;

(4)find命令补充-xargs

xargs 它可以捕获一个命令的输出,而后传递给另一个命令

在使用 find命令的-exec选项处理匹配到的文件时, find命令将全部匹配到的文件一块儿传递给exec执行。但有些系统对可以传递给exec的命令长度有限制,这样在find命令运行几分钟以后,就会出现溢出错误。错误信息一般是“参数列太长”或“参数列溢出”。

这时候就体现出xargs命令的价值了,特别是与find命令一块儿使用。

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

在有些系统中,使用-exec选项会为处理每个匹配到的文件而发起一个相应的进程,并不是将匹配到的文件所有做为参数一次执行;这样在有些状况下就会出现进程过多,系统性能降低的问题,于是效率不高; 而使用xargs命令则只有一个进程。

[举例]

find ./ -type f -perm -002 | xargs chmod o-w

find /tmp -name core -type f -print | xargs /bin/rm -f

相关文章
相关标签/搜索