一、find命令格式

find命令用来在指定的路径下查找指定的文件,其格式如下:

find path-name [-options] [-print -exec -ok 命令 {} \;]
path-name: find命令查找的目录路径,例如,可以用.表示当前目录,用/表示系统目录
-options:find命令用来控制查找的方式

二、find命令选项[-options]及含义

格式

含 义

-name '字符串'

查找文件名匹配所给字符串的文件,字符串内可用通配符*、?、[]

-lname '字符串'

查找文件名匹配所给字符串的所有符号链接文件,字符串内可用通配符*、?、[]

-iname '字符串'

按名称搜索无论大小写

-gid n

查找属于ID号不n的用户组的所有文件

-uid n

查找属于ID号不n的用户的所有文件

-empty

查找大小为0的目录或文件

-path '字符串'

查找路径名匹配所给字符串的所有文件,字符串内可用通配符*、?、[]

-group '字符串'

查找属于用户组为所给字符串的所有文件

-depth

在查找文件时,首先查找当前目录下的文件,然后再找其子目录下的文件

-prune 目录

查找文件时不查找该目录。如果同时使用-depth选项,那么-prune将被find命令忽略

-size n[cwbkMG]

查找文件长度为n块的文件,带有c时表示文件长度以字节计算,k表示kilo bytes,w表示字,M表示兆字节,G表示千兆字节,

-user '字符串'

查找属于用户名为所给字符串的所有文件

-mtime +n或-n

按时间查找,+n表示n天之前的,-n表示今天到n天前之间的

-type 文件类型

按指定文件类型查找。文件类型包括b(块设备文件)、c(字符设备文件)、f(普通文件)、l(符号链接)、d(目录)、p(管道)、s(socket文件)

-xtype 文件类型

检查type不检查的文件类型

-maxdepth

查找最大目录层数 如1,即只查找一层目录

-o,-a,-not

-o是或者的意思,-a是而且的意思,-not是相反的意思

-perm

按文件权限来查找文件


-delete

删除

三、find命令输出形式及含义

输出形式

含 义

-print

将查找结果输出到标准输出

-exec

对查找出的符合条件的文件执行所给出的Linux命令,而不询问用户是否需要执行该命令。{}表示shell命令选项即为所查到的文件。命令的末尾必须是;结束

注意:格式要正确, -exec 命令 {} \;

-ok

对查找出的符合条件的文件执行所给出的Linux命令。与-exec不同的是,它会询问用户是否需要执行该命令

四、find玩法

1、在系统根目录下,查找文件类型为普通文件,属于user1用户的,2天以前的,并且不包含/usr/bin目录的文件名为main.c的文件,并将结果输出到屏幕。

find / -path "/usr/bin" -prune -o -name "main.c" -user user1 -type f -mtime +2 -print

2、查找系统中所有大小为0的普通文件,并列出它们的完整路径

find / -type f -size 0 -exec ls -al {} \;

3、查找系统/var/log目录 中修改时间在7天以前的普通文件,然后以交互方式删除

find /var/log -type f -mtime +7 -ok rm {} \;

4、查找当前目录及子目录下所有*.txt文件2

find . -name "*.txt" -print

5、在用户自己的根目录下查找文件名以一个大写字母开头,紧接着是一个小写字母和两个数字,最后以.txt结尾的文件。

find ~ -name "[A-Z][a-z][0-9][0-9]*.txt" -print

注意:在这里要说[0-9]*不能匹配23,它跟一般的语言类正则不太一样,shell里面的*可以代表一切字符(单个,多个都行),如果想匹配2345只能这样写[0-9][0-9][0-9][0-9]

6、查找家目录下,权限为755的文件

find ~ -perm 755 -print

7、查找当前目录.log文件,并找出包含"error"的行

find . -type f -name "*.log" | xargs grep -r "error"

8、匹配多个条件中的一个,用-o

find . \(-name "*.sh" -o -name "*.txt") -print

9、查看根目录下所有的普通文件

find / -name -type f "*"

10、查找当前目录下包含'123'字符串的文件

find . | grep -r "123"

11、--max-depth 对查找文件的深度及层数设定

find . -max-depth 4 -name "*.txt"

12、查找当前下面7天前所有的普通文件并删除

find . -name "*" -type f -mtime +7 -delete