find
find 命令用于在指定路径下递归搜索符合条件的文件或目录,支持按名称、类型、大小、权限、修改时间等多种条件搜索,并可对结果执行进一步操作。其特点是实时查找文件系统(而非依赖索引),支持灵活的条件组合。
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. 基础搜索
# 在当前目录及子目录中查找所有 .txt 文件find . -name "*.txt"
# 在 /home 目录中查找名称包含 "report" 的 PDF 文件(不区分大小写)find /home -iname "*report*.pdf"2. 按类型和大小搜索
# 查找 /tmp 目录下大于 100MB 的普通文件find /tmp -type f -size +100M3. 按时间搜索
# 查找 /var/log 下 7 天前修改过的日志文件find /var/log -name "*.log" -mtime +7
# 查找当前目录下 1 小时内(60 分钟)访问过的文件find . -type f -amin -604. 复杂条件组合
# 查找当前目录下,不是 .txt 也不是 .md 的文件,且 3 天内修改过find . -type f ! \( -name "*.txt" -o -name "*.md" \) -mtime -35. 对结果执行操作
# 查找并删除 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 {} +man find- GNU Findutils - find