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
时需格外小心,确保路径和条件正确,以避免误操作导致数据丢失。