一、find命令简介
find命令:用于根据给定的路径和条件查找相关文件或目录,参数灵活方便,且支持正则表达式,结合管道符后能够实现更加复杂的功能。
基本语法格式:find pathname -options 搜索内容 [其他选项]
- pathname:用来指定搜索路径。
- options:用来指定搜索内容。
- 搜索内容:用来指定搜索内容,支持正则表达式。
- 其他选项:
- -print选项:将find命令匹配的文件输出到标准输出。
- -exec选项:进一步处理搜索结果。
find命令通常进行的是从根目录(/)开始的全盘搜索,不建议过大路径的搜索范围,会消耗较大的系统资源,导致服务器压力过大。
常用 options参数:
二、常用 options参数搜索
[root@centos7 temp2]# tree /usr/local/temp2/
/usr/local/temp2/
├── 2023-10-09
│ ├── 10
│ │ └── Test1.log
│ └── test1.log
├── 2023-10-10
│ └── test1.log
├── test.log
└── Test.log
3 directories, 5 files
1、按文件名搜索
options参数:
- -name:按文件名搜索,区分文件名大小写
- -iname:按文件名搜索,不区分文件名大小写
- -inum: 按inode号搜索
(1)-name和-iname
Linux 中的文件名是区分大小写的。
[root@centos7 temp2]# find /usr/local/temp2/ -name test.log
/usr/local/temp2/test.log
[root@centos7 temp2]# find ./ -iname test.log
./test.log
./Test.log
(2)-inum
每个文件都有 inode 号,如果我们知道 inode 号,则也可以按照 inode 号来搜索文件。
# ls -i 显示文件的inode属性信息
[root@centos7 temp2]# ll -i ./
total 8
237180303 drwxr-xr-x 3 root root 33 Oct 10 14:21 2023-10-09
252355940 drwxr-xr-x 2 root root 23 Oct 10 14:19 2023-10-10
169322632 -rw-r--r-- 1 root root 32 Oct 10 14:19 test.log
169322631 -rw-r--r-- 1 root root 32 Oct 10 14:19 Test.log
[root@centos7 temp2]# find ./ -inum 169322632
./test.log
[root@centos7 temp2]# find /usr/local/temp2/ -inum 169322632
/usr/local/temp2/test.log
2、按文件类型搜索
options参数:
- -type d:查找目录
- -type f:查找普通文件
- -type l:查找软链接文件
示例如下:
[root@centos7 temp2]# find /usr/local/temp2/ -type f
/usr/local/temp2/2023-10-09/test1.log
/usr/local/temp2/2023-10-09/10/Test1.log
/usr/local/temp2/2023-10-10/test1.log
/usr/local/temp2/test.log
/usr/local/temp2/Test.log
[root@centos7 temp2]# find /usr/local/temp2/ -type d
/usr/local/temp2/
/usr/local/temp2/2023-10-09
/usr/local/temp2/2023-10-09/10
/usr/local/temp2/2023-10-10
3、基于目录深度搜索
find 命令是递归遍历查找文件夹,列出当前目录及子目录下所有文件。
options参数:
- -maxdepth LEVELS:按最大深度显示。
- -mindepth LEVELS:按最少深度显示。
示例如下:
# 搜索目录下面最多1个子目录深度的所有目录
[root@centos7 temp2]# find /usr/local/temp2/ -maxdepth 1 -type d
/usr/local/temp2/
/usr/local/temp2/2023-10-09
/usr/local/temp2/2023-10-10
# 搜索目录下面最多1个子目录深度的所有文件
[root@centos7 temp2]# find /usr/local/temp2/ -maxdepth 1 -type f
/usr/local/temp2/test.log
/usr/local/temp2/Test.log
# 搜索目录下面最少1个子目录深度的所有文件
[root@centos7 temp2]# find /usr/local/temp2/ -mindepth 1 -type f
/usr/local/temp2/2023-10-09/test1.log
/usr/local/temp2/2023-10-09/10/Test1.log
/usr/local/temp2/2023-10-10/test1.log
/usr/local/temp2/test.log
/usr/local/temp2/Test.log
# 搜索目录下面最少2个子目录深度的所有文件
[root@centos7 temp2]# find /usr/local/temp2/ -mindepth 2 -type f
/usr/local/temp2/2023-10-09/test1.log
/usr/local/temp2/2023-10-09/10/Test1.log
/usr/local/temp2/2023-10-10/test1.log
4、按修改时间搜索
options参数:
- -atime[±]时间:按文件访问时间搜索,记录文件最后一次被访问的时间。
- -mtime[±]时间:按文件数据修改时间搜索,当对这个文件内容进行修改后,modify显示的时间就会更新一次。
- -ctime[±]时间:按文件状态修改时间搜索,当文件内容、更改文件权限,链接属性时随文件inode更改而改变的时间。
以-mtime来举例 “[±]” 时间的含义:
- +5:代表 6天前修改的文件。
- 5:代表前 5-6天的那一天修改的文件。
- -5:代表最近 5天内修改的文件。
示例如下:
# 查找 6天前修改的内容
[root@centos7 temp2]# find /usr/local/temp2 -mtime +5
# 查找 5~6 天那一天修改的内容
[root@centos7 temp2]# find /usr/local/temp2 -mtime 5
# 查找 5天内修改的文件,最大深度为1
[root@centos7 temp2]# find /usr/local/temp2 -maxdepth 1 -type f -mtime -5
/usr/local/temp2/test.log
/usr/local/temp2/Test.log
# 查找最近 5天内修改的目录,最大深度为1
[root@centos7 temp2]# find /usr/local/temp2 -maxdepth 1 -type d -mtime -5
/usr/local/temp2
/usr/local/temp2/2023-10-09
/usr/local/temp2/2023-10-10
5、按文件大小搜索
options参数:
- -size[±]大小:按照指定大小搜索文件。
其中:
- +:表示搜索比指定大小还要大的文件。
- -:表示搜索比指定大小还要小的文件。
find 默认的单位是512Byte,如果单位为b或不写单位,则按照 512Byte搜索,其他大小搜索单位如下:
'c' for bytes
#搜索单位是c,按照字节搜索
'w' for two-byte words
#搜索单位是w,按照双字节(中文)搜索
'k'for Kilobytes (units of 1024 bytes)
#按照KB单位搜索,必须是小写的k
'M' for Megabytes (units of 1048576 bytes)
#按照MB单位搜索,必须是大写的M
'G' for Gigabytes (units of 1073741824 bytes)
#按照GB单位搜索,必须是大写的G
示例如下:
# 查找最近 5天内修改的文件,最大深度为1,size小于2M
[root@centos7 temp2]# find /usr/local/temp2 -maxdepth 1 -type f -mtime -5 -size -2M
/usr/local/temp2/test.log
/usr/local/temp2/Test.log
三、其他选项
1、-print选项
基本语法格式:find pathname -options 搜索内容 -print
-print选项:将find命令匹配的文件输出到标准输出到屏幕。
[root@centos7 temp2]# find /usr/local/temp2 -maxdepth 1 -type f -mtime -5 -print
/usr/local/temp2/test.log
/usr/local/temp2/Test.log
[root@centos7 temp2]# find /usr/local/temp2 -maxdepth 1 -type d -mtime -5 -print
/usr/local/temp2
/usr/local/temp2/2023-10-09
/usr/local/temp2/2023-10-10
2、-exec选项
基本语法格式:find pathname -options 搜索内容 -exec 命令2 {} ;
-exec选项:作用其实是把 find 命令的结果交给由"-exec"调用的 命令2 来处理。
- “{}”:代表 find 命令的査找结果,
- “;”:\ 做转义,;是结束符。
注意:
这里的“{}”和“;”是标准格式,只要执行”-exec"选项,这两个符号必须完整书写,并且{} 与 \之间有空格。
示例1:找到文件并打印 inode 号
[root@centos7 temp2]# find /usr/local/temp2 -type f -mtime -5 -exec ls -i {} \;
237180309 /usr/local/temp2/2023-10-09/test1.log
69506504 /usr/local/temp2/2023-10-09/10/Test1.log
252355944 /usr/local/temp2/2023-10-10/test1.log
169322632 /usr/local/temp2/test.log
169322631 /usr/local/temp2/Test.log
示例1:找到文件并删除
[root@centos7 temp2]# find /usr/local/temp2 -maxdepth 1 -type f -mtime -5 -exec rm -rf {} \;
[root@centos7 temp2]# ls
2023-10-09 2023-10-10
3、-ok选项
基本语法格式:find pathname -options 搜索内容 -ok 命令2 {} ;
-ok选项与"-exec"选项的作用基本一致,区别在于:
- “-exec”的命令2会直接处理,而不询问;
- “-ok”的命令2 在处理前会先询问用户是否这样处理,在得到确认命令后,用户输入y才会执行。
示例:找到目录并询问用户是否删除。
[root@centos7 temp2]# find /usr/local/temp2 -mindepth 2 -type f -mtime -5 -print
/usr/local/temp2/2023-10-09/test1.log
/usr/local/temp2/2023-10-09/10/Test1.log
/usr/local/temp2/2023-10-10/test1.log
[root@centos7 temp2]# find /usr/local/temp2 -mindepth 2 -type d -mtime -5 -print
/usr/local/temp2/2023-10-09/10
# 找到目录并询问用户是否删除。# 需要用户输入y,才会执行
[root@centos7 temp2]# find /usr/local/temp2 -mindepth 2 -type d -mtime -5 -ok rm -rf {} \;
< rm ... /usr/local/temp2/2023-10-09/10 > ? y
[root@centos7 temp2]# find /usr/local/temp2 -mindepth 2 -type d -mtime -5 -print
[root@centos7 temp2]# find /usr/local/temp2 -mindepth 2 -type f -mtime -5 -print
/usr/local/temp2/2023-10-09/test1.log
/usr/local/temp2/2023-10-10/test1.log
参考文章:
- find命令 – 根据路径和条件搜索指定文件:https://www.linuxcool.com/find
– 求知若饥,虚心若愚。