前言:
先阐述下find指令是干嘛的,为什么要来研究他呢?
find指令是Linux下一个很重要的操作,因为linux是一个“一切皆文件”的操作系统,find(查找文件)指令就尤为重要了,在windows操作系统下,我们查找一个文件可以直接在计算机中搜索文件,但是linux操作系统的文件是不带后缀的,同样,Linux下的find功能相对与windows来说,强大了很多。
Linux下的查找指令有多个,下面我们主要讲下locate和find两个指令
locate指令是对其生成的数据库进行遍历(生成数据库的命令(updatedb)).这一特性决定了用locate查找文件的速度会很快,那么locate速度既然能够快速的查找,那为什么还需要find指令呢?因为locate指令只能对文件进行模糊匹配,精确度不是很高。
#locate的简单操作选项:
-i //查找文件的时候不区分大小写 比如:locate -i tmp
-n //只显示查找结果的前N行 比如:locate -n 5 t
切入我们的正题:
find指令的用法总结:
- 根据文件名或正则表达式匹配搜索
(1),通过文件名查找
操作选项:-name
操作举例:先看下我们的当前目录使用pwd指令,然后在当前目录下mkdir一个文件tmp,然后使用find ./ -name tmp指令就可以找到tmp文件了,使用find ./ -name ‘tmp*‘可以查找所有包含tmp的文件。
(2)通过正则表达式查找
操作选项:!
操作举例:!故名思意,就是否定一个查找条件的,与逻辑-not非类似,
find ./ ! ‘*.c‘ -print查找文件名不为.c的文件,并打印出来
其他正则表达式还有如下一些:
-a 与条件
-o 或条件
-not 非条件(此参数的功能类似于否定参数‘!’)
2.根据文件大小查找
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
b——块(512字节); c——字节; w——字(2字节);
k——千字节 ; M——兆字节; G——吉字节。
操作选项:-size -n
操作举例:find ~ -size -100k查找小于100k的文件
操作选项:-size +n
操作举例:find ~ -size +100k查找小于100k的文件
操作选项:-size n
操作举例:find ~ -size 100k查找为100k的文件
我的系统下没有等于100k的文件。
3.根据文件深度查找
操作选项:maxdepth
操作举例:find -maxdepth 2 -name tmp在深度为2的目录中查找文件tmp
操作选项:mindepth
操作举例:find -mindepth 1 -maxdepth 3 -name tmp在深度为1至3中查找文件tmp
4.按文件权限查找
操作选项:
-perm 按照文件权限查找
-user (或者是-uid n n是用户账号的ID) 按照文件所有人查找
-group (或者是-gid n n是组名的ID)按照文件的所属组查找
操作举例:find -type f -perm 777
find -type f -user 777
find -type f -group 777(这里就不一一截图了,看了上面那么多想必大家都会了)
5.按文件类型查找
文件类型 类型参数
普通文件 f
符号文件 l
目 录 d
字符设备 c
块设备 b
套接字 s
管道文件 p
操作选项:-type
操作举例:find . -type p、find . =type f等等
6.根据文件时间查找
Linux文件系统中的三种时间戳:
▲访问时间(-atime):用户最近一次访问文件的时间;
▲修改时间(-mtime):文件内容最后一次被修改的时间。
▲变化时间(-ctime):文件元数据(metadata,例如权限或所有权)最后一次改变的时间。
操作选项:-atime 、-mtime 、-ctime(用+、-来表示大于和小于)
操作举例:find ./ -atime -1、find ./ -atime +1、find ./ -mtime -2、find ./ -ctime等等
特殊:find ./ -newer tmp ----> 查找比test.c还要新的文件
7.find与xargs结合使用
xargs参数 将标准输入转换成命令行参数
操作选项:-atime 、-mtime 、-ctime(用+、-来表示大于和小于)
操作举例:find -type f -name "*.txt" -print0 |xargs -0 rm -f(将找到的文件删除,xargs -0将\0作为 输入定界符);
find -type f -name "*.c" -print0 |xargs -0 -1(统计所有C程序文件的行数)