Linux常用命令学习笔记:find

1. 命令概述

  • 命令名称find
  • 核心功能:在指定目录下递归搜索文件和目录,根据各种条件进行查找
  • 主要用途:文件搜索、批量处理、系统管理、数据清理

2. 语法格式

find [路径...] [表达式]

3. 常用选项

选项说明
-name按文件名查找(支持通配符)
-iname按文件名查找(忽略大小写)
-type按文件类型查找(f: 文件, d: 目录, l: 符号链接)
-size按文件大小查找
-mtime按修改时间查找
-atime按访问时间查找
-ctime按状态改变时间查找
-user按文件所有者查找
-group按文件所属组查找
-perm按文件权限查找
-exec对找到的文件执行命令
-delete删除找到的文件
-print显示找到的文件(默认)
-maxdepth指定搜索的最大深度
-mindepth指定搜索的最小深度
-empty查找空文件或空目录

4. 时间参数说明

时间单位

  • n:正好 n 天前
  • +n:n 天前或更早
  • -n:n 天内

时间类型

  • -mtime:文件内容最后修改时间
  • -atime:文件最后访问时间
  • -ctime:文件状态最后改变时间(权限、所有者等)

5. 常用实例详解

(1) 按文件名查找

# 查找当前目录下所有 .txt 文件
find . -name "*.txt"

# 查找所有 .jpg 文件(忽略大小写)
find /home -iname "*.jpg"

# 查找名为 config 的文件
find /etc -name "config"

(2) 按文件类型查找

# 查找所有目录
find . -type d

# 查找所有普通文件
find . -type f

# 查找所有符号链接
find . -type l

# 查找所有块设备文件
find /dev -type b

(3) 按文件大小查找

# 查找大于 10M 的文件
find . -size +10M

# 查找小于 1K 的文件
find . -size -1k

# 查找等于 5M 的文件
find . -size 5M

# 查找空文件
find . -empty

(4) 按时间查找

# 查找 7 天内修改过的文件
find . -mtime -7

# 查找 30 天前修改过的文件
find . -mtime +30

# 查找 24 小时内访问过的文件
find . -atime -1

# 查找最近 1 小时内修改过的文件
find . -mmin -60

(5) 按用户和权限查找

# 查找属于用户 tom 的文件
find . -user tom

# 查找属于组 developers 的文件
find . -group developers

# 查找权限为 755 的文件
find . -perm 755

# 查找可执行文件
find . -perm /u=x,g=x,o=x

(6) 限制搜索深度

# 只搜索当前目录,不进入子目录
find . -maxdepth 1

# 搜索深度为 2 层的目录
find . -maxdepth 2

# 从第 2 层开始搜索
find . -mindepth 2

6. 执行命令(-exec)

(1) 基本用法

# 删除所有 .tmp 文件
find . -name "*.tmp" -exec rm {} \;

# 更改所有 .txt 文件的权限
find . -name "*.txt" -exec chmod 644 {} \;

# 统计所有 .py 文件的行数
find . -name "*.py" -exec wc -l {} \;

(2) 使用 + 提高效率

# 使用 + 将多个文件一次性传递给命令(更高效)
find . -name "*.txt" -exec chmod 644 {} +

# 查找并打包所有 .log 文件
find /var/log -name "*.log" -exec tar -czf logs.tar.gz {} +

(3) 结合 xargs 使用

# 使用 xargs 处理找到的文件
find . -name "*.tmp" -print0 | xargs -0 rm

# 查找并复制文件
find . -name "*.conf" -print0 | xargs -0 -I {} cp {} /backup/

7. 逻辑操作符

(1) 与操作(-a,默认)

# 查找所有 .txt 文件且大于 1M
find . -name "*.txt" -size +1M

# 查找属于 tom 且 7 天内修改过的文件
find . -user tom -mtime -7

(2) 或操作(-o)

# 查找 .txt 或 .log 文件
find . -name "*.txt" -o -name "*.log"

# 查找属于 tom 或属于组 developers 的文件
find . -user tom -o -group developers

(3) 非操作(!)

# 查找不是 .txt 的文件
find . ! -name "*.txt"

# 查找不属于 tom 的文件
find . ! -user tom

(4) 分组操作(使用括号)

# 查找 .txt 或 .log 文件,且大于 1M
find . \( -name "*.txt" -o -name "*.log" \) -size +1M

# 查找属于 tom 且 7 天内修改过的文件,或者属于组 developers 的文件
find . \( -user tom -mtime -7 \) -o -group developers

8. 实际应用场景

场景一:清理临时文件

# 删除所有 .tmp 文件
find /tmp -name "*.tmp" -delete

# 删除 30 天前的日志文件
find /var/log -name "*.log" -mtime +30 -delete

场景二:备份配置文件

# 备份所有 .conf 文件
find /etc -name "*.conf" -exec cp {} /backup/ \;

# 查找并打包所有配置文件
find /etc -name "*.conf" -exec tar -czf etc_backup.tar.gz {} +

场景三:查找大文件

# 查找大于 100M 的文件
find / -size +100M 2>/dev/null

# 查找当前目录下最大的 10 个文件
find . -type f -exec du -h {} + | sort -rh | head -10

场景四:批量修改文件

# 给所有 .sh 文件添加可执行权限
find . -name "*.sh" -exec chmod +x {} \;

# 更改所有 .txt 文件的所有者
find . -name "*.txt" -exec chown tom:tom {} \;

场景五:查找特定内容

# 查找包含 "password" 的文件
find . -type f -exec grep -l "password" {} \;

# 查找空目录
find . -type d -empty

# 查找损坏的符号链接
find . -type l -exec test ! -e {} \; -print

9. 注意事项

  1. 权限问题:搜索系统目录可能需要 root 权限
  2. 性能考虑:搜索大目录时使用 -maxdepth 限制深度
  3. 删除操作:使用 -delete 或 -exec rm 时要特别小心,建议先使用 -print 确认
  4. 符号链接:默认会跟随符号链接,使用 -P 不跟随
  5. 错误输出:使用 2>/dev/null 忽略权限错误

核心要点总结

  • find 是 Linux 中最强大的文件搜索工具
  • 常用选项-name-type-size-mtime-user
  • 时间参数+n(n 天前或更早)、-n(n 天内)、n(正好 n 天前)
  • 执行命令-exec 和 -delete 用于处理找到的文件
  • 逻辑操作-a(与)、-o(或)、!(非)、()(分组)
  • 实际应用:文件清理、备份、批量处理、系统维护
  • 性能优化:使用 -maxdepth 限制深度,使用 + 替代 \; 提高效率

作 者:南烛
链 接:https://www.itnotes.top/archives/227
来 源:IT笔记
文章版权归作者所有,转载请注明出处!


上一篇
下一篇