find 是 Linux 和类 Unix 操作系统中的一个强大命令,用于在目录中查找文件或目录,并可以对找到的文件执行特定的操作。它支持根据文件名、类型、大小、时间等条件进行搜索,非常灵活和强大。
以下是对 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 find . -size -10k
|
按时间查找(-mtime、-atime、-ctime)
-mtime:按文件的修改时间查找。
-atime:按文件的访问时间查找。
-ctime:按文件的属性更改时间查找。
时间格式:
+n 表示 n 天前。
-n 表示 n 天以内。
n 表示正好 n 天前。
示例:
1 2 3
| find . -mtime +7 find . -atime -2 find . -ctime 1
|
按文件权限查找(-perm)
限制搜索范围(-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 {} \; find . -type f -exec chmod 644 {} \;
|
-delete
- 删除满足条件的文件或目录(危险操作)。
- 示例:
1
| find . -name "*.tmp" -delete
|
查找空文件或目录(-empty)
示例:
按用户或组查找(-user 和 -group)
-user:按文件的所有者查找。
-group:按文件所属的组查找。
示例:
1 2
| find . -user root find . -group staff
|
示例
查找当前目录下的所有 .txt 文件
查找 /var/log 下大于 10 MB 的文件
1
| find /var/log -size +10M
|
查找最近 3 天修改过的文件
查找并删除所有 .tmp 文件
1
| find . -name "*.tmp" -delete
|
查找并复制所有 .jpg 文件到 /backup
1
| find . -name "*.jpg" -exec cp {} /backup/ \;
|
查找空文件或空目录
查找目录的最大深度为 2 的所有 .sh 文件
1
| find . -maxdepth 2 -name "*.sh"
|
查找所有权限为 644 的文件
查找用户为 root 的所有文件
按目录结构保留并压缩查找到的文件
- 查找
.log 文件并打包成 logs.tar.gz:1
| find . -name "*.log" | tar -czvf logs.tar.gz -T -
|
总结
find 是 Linux 中功能最强大的文件搜索工具之一,支持多种条件组合和自定义操作。
- 结合其他命令(如
rm、chmod、cp 等),可以完成复杂的批量操作。
- 使用
-delete 和 -exec 时需格外小心,确保路径和条件正确,以避免误操作导致数据丢失。