详解Linux——find命令(stat+exec+xargs+dd命令)

Posted 何翰宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解Linux——find命令(stat+exec+xargs+dd命令)相关的知识,希望对你有一定的参考价值。

文章目录

find命令

在Linux操作系统中,find命令主要用于进行文件的搜索
语法:find [路径] [选项] [选项的参数]
常用选项:

  • -name:根据文件的名称搜索文件,支持通配符*
  • -type:根据文件类型,f代表普通文件,d代表文件夹

1.根据名称查找文件

获取 /etc目录下 所有后缀为.d的目录
只显示前15条

命令:find /etc -name "*.d" -type d | head -15

/etc目录下,查找包含 host关键字的普通文件

命令:finde /etc -name "host*" -type f

2. 根据文件修改时间查找文件

  • 创建时间:代表这个文件什么时候被创建
  • 访问时间:代表这个文件什么时间被访问
  • 修改时间:代表这个文件什么时间被修改

stat命令

语法:stat 文件名
作用:获取文件最后的修改时间

  • Access: 表示文件的访问时间,当文件被访问时,更新这个时间
  • Modify:表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间
  • Change:表示文件的状态时间,当文件的状态被修改时,更新这个时间,比如文件的链接数,大小,权限,Blocks数

一个文件刚创建的时候,这三个时间是一样的,因为我们在创建它的同时修改了它的内容,所以它的大小,Blocks也发生了变化,也相当于一次访问。

touch命令

创建文件是设置修改时间
语法:touch -m -d "日期时间格式" 文件名称

作用:

  1. 如果文件不存在,则自动创建该文件,然后设置其最后的修改时间
  2. 如果文件存在,touch命令就是修改文件的最后修改时间

根据文件的最后修改时间搜索文件

语法:find [路径] -mtime +days/-day3

  • -mtime:根据文件的最后修改时间搜索文件
  • +:加号,代表搜索几天前的文件
  • -:减号:代表搜索几天以内的文件信息

示例1:搜索2天以前的文件信息(注意:两天前是不包含当天的,也就是今天8号,两天前就是5号)

命令:find [路径] -mtime +2

示例2:
搜索3天内的.txt文件
注意:三天内式包含当天的,比如今天8号就包含6、7、8号
命令:find ./ -name "*.txt" -mtime -3

3. 根据文件大小查找文件

dd 命令

基本语法:dd if=/dev/zero of=文件名称 bs=1M count=1
主要功能:在Linux系统中,生成某个大小的测试文件

选项说明:
if代表输入文件
of代表输出文件
bs代表字节为单位的块大小。
count代表被复制的块。
其中/dev/zero是一个字符设备,会不断返回0值字节。

示例1:使用dd创建一个大小为1M大小的 tmp.txt文件
命令:dd if=/dev/zero of=tmp.txt bs=1M count=1

示例2:使用dd创建一个5M大小的demo.c文件

按文件大小查找

语法:find [路径] -size [文件大小,常用单位:K,M,G]

  • k:KB

  • M:MB

  • G:GB

  • size:搜索大小等于size值的文件

  • -size:搜索 [0,size) 值

  • +size:(size,无穷大)

示例1:搜索单前目录下大小为5M的文件

命令:find ./ -type f -size 5M

示例2:搜索单前目录下大小为5M以内的文件( 0 < = s i z e < 5 M 0<= size < 5M 0<=size<5M

命令:find ./ -type f -size -5M


示例3:搜索当前目录中,文件大于5M的文件

命令:find ./ -type f -size +5M

4. -exec和xargs

  • xargs
    是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。

案例:删除Linux系统中/var/log 目录下20天以前的日志信息

正确删除方式1: 使用管道+xargs
命令:find /var/log -name "*.log" -mtime +20 | xargs rm -rf

可以理解为,xargs把管道里拿到的数据变成了 rm -rf的参数


正确删除方式2:使用find命令 + -exec选项

这里删除的是两天前的日志信息

命令:find /var/log -type f -name "*.log" -mtime +2 -exec rm -rf \\;

-exec 选项可以理解为把 find查询的结果放到了
\\;就可以理解为这是 -exec的标识

以上是关于详解Linux——find命令(stat+exec+xargs+dd命令)的主要内容,如果未能解决你的问题,请参考以下文章

find : find命令详解

Linux基本命令之find命令详解

linux find命令格式及find命令详解

find 命令详解

Linux find 命令详解

linux find命令详解