find 命令这 7 种高级用法,你知道多少
admin
2024-03-16 12:44:42
0

文章目录

  • 前言
  • ① 按名称或正则表达式查找文件
  • ② 查找不同类型的文件
  • ③ 按指定的时间戳查找文件
  • ④ 按大小查找文件
  • ⑤ 按权限查找文件
  • ⑥ 按所有权查找文件
  • ⑦ 在找到文件后执行命令
  • 总结

前言

可以很肯定地说,find 命令是 Linux 后台开发人员必须熟知的操作之一,除非您使用的是 Windows Server。

对于技术面试,它也是一个热门话题。让我们看一道真题:

如果你的 Linux 服务器上有一个名为 logs 的目录,如何删除该目录下最后一次访问时间超过一年的日志文件呢?🤔

这种情况很常见,但令人惊讶的是,并非每个开发人员都能在面试中清楚地写出这个命令。

答案:首先我们需要使用 cd 命令进入对应的目录,然后,命令如下:

find . -type f -atime +365 -exec rm -rf {} \; 

如果你还没有完全理解上面的命令,完全不用担心。本文将介绍 find 命令的 7 个实际用途,您最终会掌握它。如果您已经知道了,那么阅读这篇文章对您来说将是一个很好的回顾。

① 按名称或正则表达式查找文件

  1. 要按特定名称搜索文件,命令如下:
find . -name test.txt
  1. 如何查找所有格式为 pdf 的书籍?使用正则表达式:
find ./yang/books -name "*.pdf"
  1. 默认情况下,find 命令会搜索常规文件,但最好进行指定(-type f)以使所有内容更清晰:
find ./yang/books -type f -name "*.pdf"

② 查找不同类型的文件

  1. 除了搜索常规文件外,我们还可以通过指定 -type 选项来搜索其他类型的文件。
 find . -type d -name "yang*"
  1. 符号链接
 find . -type l -name "yang*"

③ 按指定的时间戳查找文件

要按指定的时间戳搜索文件,我们需要知道 Linux 系统中的 3 个不同的时间戳:

  • 访问时间戳(atime):最后一次读取文件的时间。
  • 修改时间戳 (mtime):文件内容最后一次被修改的时间。
  • 更改时间戳 (ctime):上次更改文件元数据的时间(如,所有权、位置、文件类型和权限设置)
  1. 所以,正如开头提到的面试题,要搜索 atime 超过一年的文件,我们可以编写如下命令:
find . -type f -atime +365
  1. 如果我们需要查找 mtime 正好是 5 天前的文件,请不要包含 +,因为它的意思是“大于”。
find . -type f -mtime 5
  1. 显然,+ 表示“大于”,- 表示“小于”。所以我们可以搜索 ctime 在 5~10 天前的文件:
  find . -type f -ctime +5 -ctime -10

④ 按大小查找文件

-size选项使我们能够按指定大小查找文件。我们可以将其计量单位指定为以下约定:

b:512 字节块(默认)
c:字节
w:双字节字
k:KB
M:MB
G:GB

类似于按时间戳查找文件,+ 表示“大于”,- 表示“小于”。例如,要查找大小为 10 MB ~ 1 GB 的文件

find . -type f -size +10M -size -1G

⑤ 按权限查找文件

合理控制文件的权限是 Linux 管理员的一项重要任务。find 命令的 -perm 选项可以帮助我们按指定权限查找文件:

find . -type f -perm 777

例如,上面的命令会搜索所有具有 777 权限的文件,这意味着一个文件对其持有者、组和所有用户具有所有的读、写和可执行权限。

⑥ 按所有权查找文件

这个任务很简单。我们可以使用 -user 选项指定用户名。例如,以下命令将查找所有属于 yang 的文件:

find -type f -user yang

⑦ 在找到文件后执行命令

在大多数情况下,我们希望在找到我们需要的文件后进行后续操作。例如将其删除,或检查它们的详细信息等等。-exec 命令使这些所有事情变得更加容易。

现在,要了解如何使用它,让我们回到之前提到的面试问题:

find . -type f -atime +365 -exec rm -rf {} \;

上述命令在 -exec 选项后是 rm -rf,其用于删除文件。{} 是用于查找结果的占位符。

注意:占位符 {} 非常重要,尤其是在您想删除文件时。因为,如果您不使用它,该命令将对所有文件执行(而不是您刚刚通过 find 命令找到的文件)。

做一个尝试,请在终端上执行以下两个命令,并检查它们的结果有何不同:

  1. 一个使用占位符:
find . -type f -atime +5 -exec ls {} \;
  1. 另一个不使用:
find . -type f -atime +5 -exec ls \;

-exec 选项后面的命令必须以分号(;)结束。众所周知,转义字符用于去除单个字符的特殊含义。在 Linux 中,反斜杠\用作转义字符。所以我们将它用于分号字符。

总结

看完 find 命令的 7 种用法后,开始提到的面试题现在好像很容易解决了。

find . -type f -atime +365 -exec rm -rf {} \;

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...