跳转到内容

find

find 命令用于在指定路径下递归搜索符合条件的文件或目录,支持按名称、类型、大小、权限、修改时间等多种条件搜索,并可对结果执行进一步操作。其特点是实时查找文件系统(而非依赖索引),支持灵活的条件组合。

Terminal window
find [路径] [条件] [动作]
  • 路径:指定开始搜索的目录,默认为当前目录(.),可以指定多个路径,用空格分隔
  • 条件:定义搜索条件(如文件名、类型、时间等)
  • 动作:找到符合条件的文件后要做什么,比如打印、删除、执行某个命令等

1. 常用条件

条件 说明
-name "<filename>" 按文件名称查找文件
-iname "<filename>" 按文件名称查找文件(不区分大小写)
-type <filetype> 按文件类型查找:b 块文件、c 字符文件、d 目录、f 普通文件、l 符号链接、p 命名管道
-size [+/-]<n>[unit] 按文件大小查找,单位:c 字节、w 字、b 块(512B,默认)、k KB、M MB、G GB。+ 表示大于,- 表示小于,不带表示等于
-<m/a/c>time [+/-]<n> 按修改时间(天)查找:-mtime 文件内容修改时间、-atime 访问时间、-ctime 元数据修改时间。+<n> 超过 n 天前,-<n> 最近 n 天内,<n> 正好 n 天前
-<m/a/c>min [+/-]<n> 按修改时间(分钟)查找,含义同上
-uid <n> 按用户 UID 搜索文件
-gid <n> 按组 GID 搜索文件

2. 常用动作

动作 说明
-print 打印搜索结果(默认动作)
-delete 删除搜索到的文件(危险操作)
-exec <command> {} \; 对每个匹配结果执行 command,{} 为匹配到的文件名占位符,\; 为结束标志
-exec <command> {} + 把多个匹配结果一次性传给 command 执行,而不是每次传一个
-ok command {} \; 与 -exec {} \; 类似,但在执行前逐个交互确认
-ok command {} + 与 -exec {} + 类似,但在执行前交互确认

动作可以组合使用,-exec 也可以多次使用

3. 组合条件

条件 说明
-a / -and 逻辑与(默认,可省略)
-o / -or 逻辑或
! / -not 逻辑非

1. 基础搜索

Terminal window
# 在当前目录及子目录中查找所有 .txt 文件
find . -name "*.txt"
# 在 /home 目录中查找名称包含 "report" 的 PDF 文件(不区分大小写)
find /home -iname "*report*.pdf"

2. 按类型和大小搜索

Terminal window
# 查找 /tmp 目录下大于 100MB 的普通文件
find /tmp -type f -size +100M

3. 按时间搜索

Terminal window
# 查找 /var/log 下 7 天前修改过的日志文件
find /var/log -name "*.log" -mtime +7
# 查找当前目录下 1 小时内(60 分钟)访问过的文件
find . -type f -amin -60

4. 复杂条件组合

Terminal window
# 查找当前目录下,不是 .txt 也不是 .md 的文件,且 3 天内修改过
find . -type f ! \( -name "*.txt" -o -name "*.md" \) -mtime -3

5. 对结果执行操作

Terminal window
# 查找并删除 30 天前的临时文件
find /tmp -name "temp*" -mtime +30 -delete
# 查找所有 .sh 文件,并显示其详细信息
find . -name "*.sh" -exec ls -l {} \;
# 查找并复制所有图片到 /backup/images 目录(需先创建目录)
find . -type f \( -name "*.jpg" -o -name "*.png" \) -exec cp {} /backup/images/ \;
# 查看每个 .txt 文件的内容
find . -name "*.txt" -exec cat {} +