#简介
详细学习可以到我的个人博客网站学习—SimpleBlog
find是linux 命令,它将档案系统内符合 expression 的档案列出来。你可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。 --摘自百度百科
#详解
语法: find [path...] [expression]
path指明查找路径,不写默认当前路径。
expression指明查找条件(可以多个条件),以及可以对查找结果操作。
##按名称查找
使用参数 -name
–查找指定的文件名
find ./ -name test.txt
–支持使用通配符
find ./ -name "*.txt"
##按文件类型查找
使用参数 -type
:–😐:–😐:–😐:–😐:–😐:–😐:–😐
d|c|b|p|f|l|s
目录|字型装置文件|区块装置文件|具名贮列|一般文件|符号连结|socket文件
–查找普通文件
find ./ -type f
–查找目录
find ./ -type d
##按时间查找
使用参数:
:–:||:–😐:–:
-atime | 最后一次读取文件的时间(单位都是天)
-mtime | 文件内容最后一次被修改的时间
-ctime | 上次更改文件元数据的时间(如,所有权、位置、文件类型和权限设置)
–查找往前推第30天读取过的文件
find ./ -atime 30
–查找查找往前推第30天之前修改过的文件
find ./ -mtime +30
–查找查找往前推第30天之后更改元数据过的文件
find ./ ctime -30
##按文件大小查找
使用参数- size
计量单位:
:–😐:–😐:–😐:–😐:–😐:–:
b|c|w|k|M|G
512 字节块(默认)|字节|双字节|KB|MB|GB
–查找512字节文件
find ./ -size 1b
–查找小于512字节块的文件
find ./ -size -512c
–查找大于1KB的文件
find ./ -size +1k
–查找大于1KB小于1MB文件
find ./ -size +1k -size +1M
##按权限查找
使用参数-perm
–查找777文件
find ./ -perm 777
##按用户查找
所有参数-user
–查找属于用户test的文件
find ./ -user test
##对查找结果操作
使用参数-exec
使用{}是用于查找结果(注意不是结果集,比如查找结果是a,b两文件,会依次对a和b分开操作,且a,b是字符串类型)的占位符,使用 ; 结束语句,其中 \ 代表转义。
┌──(root㉿kali)-[~/Desktop]
└─# find -name "123*" #查看输出结果
./1234.png
./123.php
./123.png
./123456
┌──(root㉿kali)-[~/Desktop]
└─# find -name "123*" -exec echo {} nihao \; #在输出结果后加上nihao字符串
./1234.png nihao
./123.php nihao
./123.png nihao
./123456 nihao
┌──(root㉿kali)-[~/Desktop]
└─# find -name "123456*" -exec rm -rf {} \; #查找并删除文件
┌──(root㉿kali)-[~/Desktop]
└─# find -name "123456*" #查找结果为空
##指定查找深度
find默认递归查找所有子目录,可以通过参数-maxdepth
指定最大深度,-mindepth
指定最小深度,1代表当前目录
–查找当前目录
find ./ -maxdepth 1
–查找子目录且不查找子目录的子目录
find ./ -maxdepth 2
–不查找当前目录,但是查找子目录下的所有文件
find ./ -mindepth 2
##与或非查找
find提供多条件查询(多条件默认是与),功能适用更多场景。
:–😐:–😐:–:
-a|-o|!
与|或|非
实例:
┌──(root㉿kali)-[~/Desktop/example]
└─# ls #查看文件
aabbcc.txt aabc.txt aa.txt abc.txt ac.txt a.txt
──(root㉿kali)-[~/Desktop/example]
└─# find ./ -name "*bc*" -a -name "a*" #查找文件名以a开头且包含bc的文件
./abc.txt
./aabc.txt
./aabbcc.txt
┌──(root㉿kali)-[~/Desktop/example]
└─# find ./ -name "*bc*" -name "a*" #同上,多条件默认是与所以可以不写 -a
./abc.txt
./aabc.txt
./aabbcc.txt
┌──(root㉿kali)-[~/Desktop/example]
└─# find ./ -name "*bc*" -o -name "a*" #查找文件名以a开头或包含bc的文件
./aa.txt
./abc.txt
./aabc.txt
./aabbcc.txt
./a.txt
./ac.txt
┌──(root㉿kali)-[~/Desktop/example]
└─# find ./ ! -name "*bc*" #查找文件名不包含bc的文件
./
./aa.txt
./a.txt
./ac.txt
┌──(root㉿kali)-[~/Desktop/example]
└─# find ./ ! -name "*bc*" -a ! -name "ac*" ##查找文件名不以ac开头且不包含bc的文件
./
./aa.txt
./a.txt
┌──(root㉿kali)-[~/Desktop/example]
└─# find ./ ! -name "*bc*" ! -name "ac*" #同上,-a可以省略
./
./aa.txt
./a.txt