Linux[find命令]-根据路径和条件搜索指定文件并删除

一、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

参考文章:

– 求知若饥,虚心若愚。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 的 find 命令可以根据文件的权限来查找文件。具体用法如下: ``` find [路径] -perm [权限模式] [操作] ``` 其中,路径表示要查找的目录或文件,权限模式表示要匹配的文件权限,操作表示要对匹配的文件进行的操作,例如打印、删除等。 权限模式可以使用以下格式: - 数字形式:使用三位八进制数表示,分别表示文件所有者、文件所属组、其他用户的权限,例如 644 表示所有者读写,所属组和其他用户只读。 - 符号形式:使用 u 表示所有者,g 表示所属组,o 表示其他用户,a 表示所有用户,r 表示读权限,w 表示写权限,x 表示执行权限,+ 表示添加权限,- 表示删除权限,= 表示设置权限为指定值。 例如,要查找当前目录及其子目录下所有权限为 644 的文件,可以使用以下命令: ``` find . -type f -perm 644 -print ``` 其中,`.` 表示当前目录,`-type f` 表示要查找的是普通文件而非目录或链接,`-perm 644` 表示文件权限为 644,`-print` 表示打印匹配的文件名。 又例如,要将当前目录及其子目录下所有权限为 777 的文件修改为 644,可以使用以下命令: ``` find . -type f -perm 777 -exec chmod 644 {} \; ``` 其中,`-exec` 表示对匹配的文件执行指定命令,`chmod 644 {}` 表示将文件权限设置为 644,`\;` 表示命令结束。`{}` 表示匹配的文件名,需要用 `\` 转义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值