侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Linux 常用命令--find

2023-12-04 星期一 / 0 评论 / 0 点赞 / 68 阅读 / 6964 字

find 命令是Uxin/Linux命令行工具箱中最棒的工具之一。该命令对于编写shell脚本所起到的作用不可小视,但是大多数人却无法最大程度发挥它的功效。现在我们来讨论find的大多数常见的用法。预

find 命令是Uxin/Linux命令行工具箱中最棒的工具之一。该命令对于编写shell脚本所起到的作用不可小视,但是大多数人却无法最大程度发挥它的功效。现在我们来讨论find的大多数常见的用法。

预备知识:find命令工作方式如下:沿着文件层次结构向下遍历,去匹配符合条件的文件,执行相应的操作。**

find用法:**

用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
$ find . -print

解释:打印当前目录下所有文件和目录列表,-print可以忽略,find命令仍会打印出文件名。现在我们已经学会了find最常见的用法,下面来看一下find命令其它的参数。

一、-name 参数

根据文件名或正则表达式进行搜索

$ find /home/admin -name "*.txt" -print

解释:使用-name查找/home/admin目录下所有的.txt文件,并打印出来,find命令还有一个参数是-iname(忽略字母大小写),与name类似,只不过匹配时会忽略大小写。

二、匹配多个条件中的一个,可以采用OR条件操作

$ find . /( -name "*.txt" -o -name "*.log" /) -print

解释:上面代码会打印出所有.txt和.log文件,find命令能够匹配所有这两类文件。/( /)用于将-name ".txt" -o -name ".log" 视为一个整体。

_三、否定参数_

$ find ! -name "*.txt" -print

解释:上面的find命令能够匹配所有不以.txt结尾的文件名。

四、基于目录深度的搜索-maxdepth

$ find . -type f -maxdepth 1 -name "*.txt" -print

解释:以上命令,只在当前目录层级搜索所有.txt文件,并打印出来。find命令是沿着文件层次向下搜索,有些时候我们只需要在当前的目录进行搜索,无须再继续向下查找,对于这种情况,我们使用深度选项来限制find命令向下查找的深度。如果只允许find在当前目录中查找,深度可以设置为1,向下两级,深度可以设置为2,以此类推。

五、根据文件类型搜索

$ find . -type d -print

解释:列出所有的目录

$ find . -type f -print

解释:列出所有的文件

$ find . -type l -print

解释:列出所有符号链接

type参数匹配所需要的文件类型:

文件类型                    类型参数普通文件                       f符号链接                       l目录                          d字符设备                       c块设备                        b套接字                         sFIFO                          p

六、根据文件时间进行搜索Unix/Linux 文件系统中的每一个文件都有三种时间戳:

访问时间(-atime):用户最近一次访问文件的时间

修改时间(-mtime):文件内容最后一次被修改的时间

变化时间(-ctime):最后一个修改权限的时间

在三个参数可作为find的时间选项,用整数指定,单位是天,通常带有-或+:

-表示小于,+表示大于

$find . -type -atime -7 -print

解释:打印最近7天内被访问过的所有文件

$find . -type -atime 7 -print

解释:打印恰好在7天前被访问过的所有文件

$find . -type -atime +7 -print

解释:打印出访问时间超过7天的所有文件

-atime -ctime -mtime单位都是基于天,还有一些其它参数是基于分钟作文计算单位:

-amin (访问时间)

-mmin(修改时间)

-ctime (变化时间)

$ find . -type -amin +7 -print

解释:打印出访问时间超过7分钟的所有文件

七、基于文件大小的搜索

根据文件的大小,可以这样搜索:

$ find . -type f -size +2M

解释:大于2M的文件

$ find . -type -size -2M

解释:小于2M的文件

$find . -type -size 2M

解释:等于2M的文件

find指定文件大小的参数有:b--块(512字节)

c--字节

w--字(2字节)

k--1024字节

M--1024K字节

G--1024M字节

八、删除匹配的文件

-delete可以用来删除find查找到的匹配文件。

$find . -type f -name "*.txt" -delete

解释:删除当前目录下所有.txt文件

九、根据权限查找

$ find . -type f -name "*.txt" -perm 644 -print

解释:查找当前目录下所有.txt文件并且文件权限为644的所有文件

十、根据用户查找文件

$ find . -type f -user admin -print

解释:打印出用户admin拥有的所有文件

十一、-exec参数

find命令可以借助选项-exec与其它命令进行结合。-exec算得上是find最强大的特性之一。

# find . -type f -user root -name '*.txt' -exec chown admin {} /;

解释:用-user找出root拥有的.txt文件,然后用-exec更改所有权为admin,它会被分析为:chown admin filename.txt。

-exec之后可以接任何命令。{}表示一个匹配。对于任何匹配的文件名,{}均会被该文件名所替换

$ find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD /;

解释:将10天前的.txt文件复制到OLD目录中

$ find . -type f -name "*.txt" -exec printf "Test file : %s/n {} /";

解释:查找到的.txt文件被{}所替换,-exec后跟的命令为printf,所以执行结果应该为:

Test file: test1.txt

Test file: test2.txt

...等。

十二、find跳过特定的目录

$ find . /( -name ".git" -prune /) -o /( -type f -print /)

解释:以上命令打印出不包括在.git目录中的所有文件名称

( -name ".git" -prune )的作用用于进行排除,它指明了.git目录应该排除在外,而( -type f -print )指明了需要执行的动作。

广告 广告

评论区