一、find命令格式
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命令输出形式及含义
输出形式 | 含 义 |
将查找结果输出到标准输出 | |
-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