find命令

本文详细介绍了find命令的功能和使用方法,包括基本用法、文件搜索、时间戳筛选、文件大小匹配等高级特性,以及如何结合其他命令实现自动化任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 find的用途:

*概述:find指令用于在指定目录下查找文件,并可以对查找到的文件执行指定的操作。


二 使用指南:

(1)列出当前目录及子目录下的所有的文件和文件夹。

find base_path base_path可以是任何的位置,find会从该位置向下查找。


(2)根据文件名或正则表达式匹配搜索。

选项-name的参数指定了文件名所必须匹配的字符串,可以使用通配符作为参数使用,-iname选项和-name类似,只是它忽略大小写。

$ find .-name  "example*"

选项-path的参数可以用通配符来匹配文件路径或文件,-name总是用给定的文件名进行匹配,-path则将文件路径作为一个整体进行匹配。

$ find . -name "shell*"

/home/lyr/shell/A

/home/lyr/shell/shell

选项-regex的参数和-path类似,只不过-regex是基于正则表达式来匹配文件路径的。


(3)find操作与逻辑运算符结合

find的查找条件可以是用逻辑运算符组成的复合条件。

逻辑与:用选项"-a"表示;

逻辑或:用选项“-o”表示;

逻辑非:用选项“!”表示。


(4)基于目录深度的探索

find命令会在使用时遍历所有的子目录,可以用一些深度参数来限制find命令遍历的深度,其中-maxdepth(指定最大深度)和-mindepth(指定最小深度)。

$ find . -maxdepth 2  -name "example"


(5)根据文件类型搜索

 类unix系统将一切都视为文件,文件具有不同的类型,例如:普通文件(f)、目录(d)、字符设备(c)、块设备(b)、符号链接(l)、套接字(s)以及FIFO(p)等。 

 选型-type可以对文件搜索进行过滤。

$find . -type d


(6)根据文件时间进行搜索

Unix/Linux文件系统中的每一个文件都有三个时间戳(timestamp),如下:

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

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

变化时间(-ctime):文件元数据(metadata,例如权限或所有权)最后一次修改的时间。

这三个都可作为find的时间参数,可以整数值给出,单位是天,这些整数值通常还带有-或+:-表示小于,+表示大于。

例如:(以访问时间-atime为例,其余的一样)

$ find .-type f -atime -7(最近7天内被访问的所有文件)

$find . -type f -atime 7(恰好在七天前被访问的所有文件)

$find . -type f -atime+7(访问时间超过七天的所有文件)

基于时间的参数是以分钟为计量单位的,这些包括:(用法同上)

-amin:访问时间

-mmin:修改时间

-cmin:变化时间  

find还有一个-newer参数,可以指定一个用于比较时间戳的参考文件,然后找出比参考文件更新的所有文件。


(7)基于文件大小的搜索:

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

  #大于2KB的文件

$ find . -type -f -size +2k

#小于2KB的文件

$ find . -type -f -size -2k

#等于2KB的文件

$ find . -type -f -size 2k


除k之外,还可以用其他文件大小单位:

        b:快(512字节)

c:字节

w:字

k:千字节

M:兆字节

G:吉字节


(8)删除匹配文件

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

$ find . -type  f -delete


(9)基于文件权限和所有权的匹配

文件匹配可以根据文件权限进行。

选项-perm查找符合指定的权限模式的路径名的所有文件,权限模式可以使用数字方式表示。

选项-user查找属于指定用户名的所有文件。


(10)结合find执行命令或动作

find命令可以使用选项-exec与其他命令进行结合。

$ find . -type f  -user root -exec chown lyr  {}  \;//注意;不能省略。

{}是一个特殊的字符串,与-exec结合使用。对于每一个匹配的文件,{}都会被替换成相应的文件名。例如,上例中如果root的用户文件为text1,text2,那么chown lyr {}会被解析为chown lyr text1和chown lyr text2。

无法在-exec参数中直接使用多个命令,它只能够接受单个命令;但是有一个技巧,可以把多个命令写入到一个shell脚本中,然后在-exec中使用这个脚本。

-exec ./ command.sh {} \;


(11)让find跳过特定的目录

find操作可以跳过一些子目录来进行指定的操作。


 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值