UNIX/linux的find命令细节

本文详细介绍了Linux下find命令的使用方法,包括如何根据文件名、路径、时间戳等条件搜索文件,以及如何结合其他命令实现更复杂的操作。

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

find 命令的工作方式如下:

沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作.


1根据文件名或者正则表达式匹配搜索

选项-name的参数指定了文件名所必须匹配的字符串,我们可以将通配符作为参数使用."*.txt" 可以匹配所有的以".txt"结尾的文件.选项-print 在终端中打印出符合条件的文件名或者文件路径,这些匹配条件作为find 的参数给出

find /home/huangyuan -name "*.txt" -print

find 有一个选项-iname 可以忽略文件名的大小写

如果想匹配多个条件中的一个,可以使用 OR 条件操作

find . \(-name "*.txt" -o -name "*.pdf"\) -print

上面的代码会打印出所有的 ".txt" 和 ".pdf" 文件,是因为这个find 命令可以匹配所有的这两类文件

其中, "\(" 和 "\)" 用于将 -name "*.txt" -o -name "*.pdf" 视为一个整体


选项 -path 可以使用通配符来匹配文件路径或者文件名

选项 -regex 是基于正则表达式来匹配文件路径货文件.正则表达式是通配符的高级形式,例如,可以使用正则表达式来匹配Email ,一个 Email 的形式通常是 name@host.root

所以可以将其一般化为 [0-9a-zA-A]+@[0-9a-zA-A]+.[0-9a-zA-A] +

 "+" 指明在它之前的字符类中字符可以出现一次或者多次


2否定参数 !

find 也可以用 "!" 来否定参数的含义

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

上面的命令可以用来 匹配所有不以 ".txt" 结尾的文件


3 基于目录深度的搜索

find 命令在使用时会遍历所有的子目录,我们可以使用 -mindepth 和 -maxdepth 来限制搜索子目录的深度

find . -maxdeoth 1 -print 

这条目录只会打印当前目录中的所有文件,而不会打印子目录中的文件

find . -mindepth 2 -print

这条目录打印目录深度至少为2 的文件


4 根据文件类型搜索

find . -type d -print

上面的命令只会打印出目录

文件类型                类型参数

普通文件                f

符号连接                l

目录                       d

字符设备                c

块设备                    b

套接字                    s

Fifo                        p


5 根据文件时间进行搜索

unix/linux 文件系统中的每一个文件都有三种时间戳(timestamp) ,如下所示

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

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

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

在unux/linux中没有创建时间这个概念

-atime,-mtime,-ctime 可以作为 find 的时间参数,例如

打印出 最近七天内被访问过的文件

find . -atime -7 -print

打印出 刚好七天前访问过的文件

find . -atime 7 -print

打印出 访问时间超过7天的文件

find . -atime +7 -print

还有其他一些基于时间的参数 (以分钟为单位)

-amin

-mmin

-cmin



6基于文件大小搜索

find . -size +2k

大于2k的文件

find . -size -2k

小于2k的文件

find .-size 2k

等于2k的文件

除了K之外,还有其他单元

b------块  512字节

c------字节

w-----字  2字节

k-----千字节

m----兆字节

G----吉字节

7删除匹配文件

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

find . -name "*.flv" -delete ##(删除所有flv文件)

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

find . -perm 644 -print

find . -user huangyuan -print

8结合 find 执行命令或动作

find 命令可以借助选项 -exec 与其他命令结合

例如  将制定目录中的所有C程序文件拼接起来写入单个文件 all_C_file.txt 

find . -name "*.c" -exec cat {} \;> all_C_file.txt

-exec 后面可以接任何命令.{}表示一个匹配.使用 > 而不使用 >> 的原因是 find 命令的输出只是一个单数据流,而只有当多个数据流被追加到单个文件中的时候才有必要用 >> 

9跳过指定目录

find .  \( -name ".get" -prune  \) -o  \( -print \)

这条命令中  \(-name ".git" -prune \) 指明 .git 目录应该排除掉, 而 \( -print \) 指明了执行的动作.这些动作需要放在第二个语句块中.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huang兄

技术分享,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值