Linux- find命令的例子

本文详细介绍Linux下的find命令用法,包括按文件名、正则表达式、文件类型、时间戳、大小、权限等条件查找文件的方法,同时提供大量实用示例。

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

find命令详细:http://man.linuxde.net/find

实例

根据文件或者正则表达式进行匹配

列出当前目录及子目录下所有文件和文件夹
find .

在/home目录下查找以.txt结尾的文件名
find /home -name "*.txt"

同上,但忽略大小写
find /home -iname "*.txt"

当前目录及子目录下查找所有以.txt和.pdf结尾的文件
find . \( -name "*.txt" -o -name "*.pdf" \)

find . -name "*.txt" -o -name "*.pdf"

匹配文件路径或者文件
find /usr/ -path "*local*"

基于正则表达式匹配文件路径
find . -regex ".*\(\.txt|\.pdf\)$"

同上,但忽略大小写
find . -iregex ".*\(\.txt|\.pdf\)$"

否定参数

找出/home下不是以.txt结尾的文件
find /home ! -name "*.txt"

根据文件类型进行搜索

find . -type 类型参数

类型参数列表:

f  普通文件
d  目录 
c  字符设备 
b  块设备 
s  套接字 
p  Fifo
根据文件时间戳进行搜索

find . -type f 时间戳
UNIX/Linux文件系统每个文件都有三种时间戳:

  • 访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
  • 修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。
  • 变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

搜索最近七天内被访问过的所有文件
find . -type f -atime -7

搜索恰好在七天前被访问过的所有文件
find . -type f -atime 7

搜索超过七天内被访问过的所有文件
find . -type f -atime +7

搜索访问时间超过10分钟的所有文件
find . -type f -amin +10

找出比file.log修改时间更长的所有文件
find . -type f -newer file.log

根据文件大小进行匹配

find . -type f -size 文件大小单元

文件大小单元:

b —— 块(512字节)
c —— 字节
w —— 字(2字节)
k —— 千字节
M —— 兆字节
G —— 吉字节

搜索大于10KB的文件
find . -type f -size +10k

搜索小于10KB的文件
find . -type f -size -10k

搜索等于10KB的文件
find . -type f -size 10k

删除匹配文件

删除当前目录下所有.txt文件
find . -type f -name "*.txt" -delete

根据文件权限/所有权进行匹配

当前目录下搜索出权限为777的文件
find . -type f -perm 777

找出当前目录下权限不是644的php文件
find . -type f -name "*.php" ! -perm 644

找出当前目录用户tom拥有的所有文件
find . -type f -user tom

找出当前目录用户组sunk拥有的所有文件
find . -type f -group sunk

借助-exec选项与其他命令结合使用

找出当前目录下所有root的文件,并把所有权更改为用户tom
find .-type f -user root -exec chown tom {} \;
上例中,{}用于与-exec选项结合使用来匹配所有文件,然后会被替换为相应的文件名。

找出自己家目录下所有的.txt文件并删除
find $HOME/. -name "*.txt" -ok rm {} \;
上例中,-ok和-exec行为一样,不过它会给出提示,是否执行相应的操作。

查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中
find . -type f -name "*.txt" -exec cat {} \;> all.txt

将30天前的.log文件移动到old目录中
find . -type f -mtime +30 -name "*.log" -exec cp {} old \;

找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;

因为单行命令中-exec参数中无法使用多个命令,以下方法可以实现在-exec之后接受多条命令
-exec ./text.sh {} \;

搜索但跳出指定的目录

查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk
find . -path "./sk" -prune -o -name "*.txt" -print

find其他技巧收集

要列出所有长度为零的文件
find . -empty


本文转自:find命令详细

### Linux 中 `find` 命令结合 `-exec` 选项进行提权操作 在 Linux 环境下,`find` 命令是一个强大的文件搜索工具,能够根据多种条件定位文件并执行相应动作。当与 `-exec` 结合使用时,可以直接对找到的目标文件运行指定命令[^1]。 对于涉及权限提升的操作而言,通常会利用 `sudo` 或者其他机制赋予必要的访问级别给所要处理的对象。下面给出一个具体的例子展示怎样安全地运用此特性: 假设目标是在根目录 `/` 下寻找所有属于用户 `nobody` 并将其所有权更改为当前登录用户的普通文件(注意实际环境中应谨慎对待此类变更),可以采用如下方式实现: ```bash sudo find / -type f -user nobody -exec chown $USER {} \; ``` 这里解释一下这条指令各部分的作用: - `sudo`: 获取超级管理员特权以便于跨越不同用户之间的界限; - `find /`: 指定起始路径为系统的最顶层即根目录; - `-type f`: 只匹配常规类型的文件而非目录或其他特殊设备节点等; - `-user nobody`: 查找那些由特定账户拥有的条目,在这里是 “nobody” 用户; - `-exec chown $USER {}`: 对每一个符合条件的结果应用更改属主的动作;其中 `{}` 表示占位符代表前面发现的内容而 `\;` 则标志着单次调用结束。 #### 安全注意事项 尽管上述方法展示了如何借助 `find ... -exec` 实现某些管理功能,但在真实场景里实施之前务必考虑周全的安全因素: - **最小化影响范围**:尽可能缩小搜索空间以及受影响对象的数量,避免不必要的改动造成系统不稳定或者数据丢失风险。 - **验证身份合法性**:确保只有授权人员才能发起这类敏感操作,并且最好记录日志供后续审计追踪之用。 - **测试环境先行**:先在一个隔离的小规模副本上预演整个流程,确认无误后再推广到生产环境中去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值