小小白祈祷中...

find 是 Linux 和类 Unix 操作系统中的一个强大命令,用于在目录中查找文件或目录,并可以对找到的文件执行特定的操作。它支持根据文件名、类型、大小、时间等条件进行搜索,非常灵活和强大。

以下是对 find 命令的详细介绍,包括基本用法、常用选项和示例。


基本语法

1
find [路径] [条件] [操作]
  • 路径:指定要搜索的目录路径,默认为当前目录(.)。
  • 条件:指定查找文件的条件(例如文件名、大小、时间等)。
  • 操作:对查找到的文件执行的操作(例如删除、移动或打印路径)。

常用选项和条件

条件/选项 功能
-name 按文件名查找,支持通配符(如 *.txt)。
-type 按文件类型查找(f 表示文件,d 表示目录)。
-size 按文件大小查找(如 +100k 表示大于 100 KB,-10M 表示小于 10 MB)。
-mtime 查找按修改时间的文件(如 -mtime +7 表示 7 天前修改的文件)。
-atime 查找按访问时间的文件。
-ctime 查找按更改属性时间的文件(例如权限变化)。
-user 按文件的拥有者查找。
-group 按文件的所属组查找。
-perm 按文件权限查找(如 -perm 755)。
-exec 对查找到的文件执行操作。
-delete 删除查找到的文件。
-iname 按文件名查找,但忽略大小写。
-empty 查找空文件或空目录。
-maxdepth 限制搜索的目录深度。
-mindepth 设置搜索的最小深度。

详解条件和操作

按文件名查找(-name-iname

  • 使用 -name 按精确文件名查找(区分大小写)。
  • 使用 -iname 按文件名查找(不区分大小写)。
  • 支持通配符 *?
    • * 匹配任意多个字符。
    • ? 匹配任意单个字符。

示例:

1
2
find . -name "*.txt"
find /var/log -iname "*.log"

按文件类型查找(-type

  • f:普通文件。
  • d:目录。
  • l:符号链接文件。
  • c:字符设备文件。
  • b:块设备文件。

示例:

1
2
find . -type f    # 查找所有文件
find . -type d # 查找所有目录

按文件大小查找(-size

  • + 表示大于,- 表示小于,直接数字表示等于。
  • 单位:
    • b:字节。
    • k:千字节。
    • M:兆字节。
    • G:千兆字节。

示例:

1
2
find . -size +1M    # 查找大于 1 MB 的文件
find . -size -10k # 查找小于 10 KB 的文件

按时间查找(-mtime-atime-ctime

  • -mtime:按文件的修改时间查找。
  • -atime:按文件的访问时间查找。
  • -ctime:按文件的属性更改时间查找。

时间格式:

  • +n 表示 n 天前。
  • -n 表示 n 天以内。
  • n 表示正好 n 天前。

示例:

1
2
3
find . -mtime +7    # 查找 7 天前修改的文件
find . -atime -2 # 查找最近 2 天访问过的文件
find . -ctime 1 # 查找正好 1 天前更改属性的文件

按文件权限查找(-perm

  • 精确匹配权限:
    1
    find . -perm 644
  • 文件至少包含指定权限:
    1
    find . -perm -755

限制搜索范围(-maxdepth-mindepth)**

  • -maxdepth:限制搜索的最大目录深度。
  • -mindepth:限制搜索的最小目录深度。

示例:

1
2
find . -maxdepth 2 -name "*.txt"   # 仅搜索当前目录及下一级目录
find . -mindepth 3 -type f # 搜索第三层及更深的文件

执行操作(-exec-delete

-exec

  • 对查找到的文件执行命令。
  • {} 用于占位,表示找到的文件。
  • \; 表示命令结束。

示例:

1
2
find . -name "*.log" -exec rm {} \;    # 删除所有 .log 文件
find . -type f -exec chmod 644 {} \; # 将所有文件权限设置为 644

-delete

  • 删除满足条件的文件或目录(危险操作)。
  • 示例:
    1
    find . -name "*.tmp" -delete

查找空文件或目录(-empty

示例:

1
find . -empty    # 查找空文件或空目录

按用户或组查找(-user-group

  • -user:按文件的所有者查找。
  • -group:按文件所属的组查找。

示例:

1
2
find . -user root    # 查找所有者是 root 的文件
find . -group staff # 查找所属组是 staff 的文件

示例

查找当前目录下的所有 .txt 文件

1
find . -name "*.txt"

查找 /var/log 下大于 10 MB 的文件

1
find /var/log -size +10M

查找最近 3 天修改过的文件

1
find . -mtime -3

查找并删除所有 .tmp 文件

1
find . -name "*.tmp" -delete

查找并复制所有 .jpg 文件到 /backup

1
find . -name "*.jpg" -exec cp {} /backup/ \;

查找空文件或空目录

1
find . -empty

查找目录的最大深度为 2 的所有 .sh 文件

1
find . -maxdepth 2 -name "*.sh"

查找所有权限为 644 的文件

1
find . -perm 644

查找用户为 root 的所有文件

1
find / -user root

按目录结构保留并压缩查找到的文件

  • 查找 .log 文件并打包成 logs.tar.gz
    1
    find . -name "*.log" | tar -czvf logs.tar.gz -T -

总结

  • find 是 Linux 中功能最强大的文件搜索工具之一,支持多种条件组合和自定义操作。
  • 结合其他命令(如 rmchmodcp 等),可以完成复杂的批量操作。
  • 使用 -delete-exec 时需格外小心,确保路径和条件正确,以避免误操作导致数据丢失。