find命令简介
find命令主要用于在某个目录下面寻找某个文件。
find命令的标准命令格式:find [path…] -name [pattern]
find命令允许我们同时指定多个要搜索的文件夹。
find命令简单实例
# 当前目录下面我新建了三个文件夹 -1F表示没行展示一个
-> ls -1F
test1/
test2/
test3/
# test1文件夹下面有个first文件
-> cd test1
-> ls
first
# test2文件夹下面有个first.txt文件
-> cd test2
-> ls
test1.txt
# 开始搜索 Linux中“.”号表示当前目录,“..”表示父目录
-> find . -name first
./test1/first
-> find test test1 test2 test3 -name first
find: ‘test’: No such file or directory
test1/first
总结:find会从左到右依次搜索每一个文件夹,如果该文件夹存在,则搜索;如果该文件夹不存在,则报错,并继续搜索下一个文件夹,直到所有的文件夹都搜索完成为止!
find指定搜索对象的类型
命令模版:find [path…] -type [param] -name [pattern]
选项 | 释义 |
---|---|
d | 文件夹 |
f | 普通文件 |
l | 符号链接文件 |
b | 块设备 |
c | 字符设备 |
p | 管道文件 |
s | socket套接字 |
find指定文件名后缀
# 使用*.txt这样的通配符表达法
-> find . -name "*.txt"
./test2/test1.txt
find按用户(属主)和群组(属组)来搜索
# 首先看一下我的group
—> ls -1F /home
admin/
git/
# 用户git,群组git
# -user选项指定用户 -group选项指定群组
-> find . -type f -user git -group git
./test1/first
./test2/test1.txt
find按时间来搜索文件
选项 | 释义 |
---|---|
-mmin/-mtime +n | 表示在n分钟/天以前文件被修改过 |
-mmin/-mtime -n | 表示在n分钟/天以内文件被修改过 |
-cmin/-ctime +n | 表示在n分钟/天以前文件状态有过改变 |
-cmin/-ctime -n | 表示在n分钟/天以内文件状态有过改变 |
-amin/-atime +n | 表示在n分钟/天以前文件被访问过 |
-amin/-atime -n | 表示在n分钟/天以内文件被访问过 |
选项 | 释义 |
---|---|
-newer file | 搜索修改时间比file文件的修改时间近的 |
-anewer file | 搜索访问时间比file文件的访问时间近的 |
-cnewer file | 搜索状态变化时间比file文件的状态变化时间近的 |
find的newerXY选项
针对两个对象的不同类型的时间进行比较,比如要搜索“访问时间”比指定文件的“修改时间”更近的文件。
在使用-newerXY选项时,一定要指定一个参数作为比较的对象,这个参数可以是一个具体的文件,也可以是一个具体的时间值,例如2018-08-12.
这个选项里的X和Y,其实是两个占位符,用户可以跟据自己的需求将它们替换成如下字母:
选项 | 释义 |
---|---|
a | 访问时间 |
B | 诞生时间 |
c | 状态变化时间 |
m | 修改时间 |
t | 将所指定的参数理解为一个具体的时间值 |
find的找到大文件
find添加“-size”选项:
例子:-size +40M:表示搜索大于40M的文件;
-size -40M:表示搜索小于40M的文件;
-size 40M:表示搜索等于40M的文件;
选项 | 释义 |
---|---|
b | 512-byte数据块 |
c | bytes |
w | 两字节的字(words) |
k | KB |
M | MB |
G | GB |
find的递归搜索
find提供了-maxdepth选项来控制搜索的深度!
# -maxdepth [param] 表示递归的深度
-> find . -maxdepth 1 -name first
-> find . -maxdepth 2 -name first
./test1/first
find命令其他
-regex选项用来匹配正则表达式
-perm选项,用于设定权限
-> find . -perm 664 -exec ls -lh {} \;
-rw-rw-r-- 1 git git 14 Nov 3 09:53 ./test1/first
-rw-rw-r-- 1 git git 0 Nov 3 20:13 ./test1/second
-rw-rw-r-- 1 git git 14 Nov 3 09:12 ./test2/test1.txt
- -exec:find针对搜索到的每一个对象执行特定的Shell命令;
- ls -hl:指定的特定Shell命令;
- {}:在-exec用法中,指代find搜索到的每一个对象;
- \;:在-exec用法中,“;“表示特定Shell命令的结束,为了防止转义所以加上了“\”。