描述
find
命令是 Linux 和类 Unix 系统中非常强大的文件查找工具。它允许用户基于多种标准来定位文件和目录。
语法
find [起点目录] [表达式]
参数
(1)起点目录:指定从哪个目录开始搜索。
(2)表达式:可以包含多个条件,用来限定要查找的文件。
表达式类型:
(1)文件属性
-name
:根据文件名匹配。-iname
:不区分大小写的文件名匹配。-type
:指定文件类型(d: 目录, f: 普通文件, l: 符号链接等)。-mtime
:文件最后修改时间(天数)。-atime
:文件最后访问时间(天数)。-ctime
:文件状态改变时间(天数)。-size
:文件大小(单位可选:b, c, w, k, M, G)。-user
:文件所有者用户名。-group
:文件所属组名。
(2)逻辑操作符
-and
:与操作。-or
:或操作。-not
:非操作。
(3)执行动作
-print
:打印文件路径(默认行为)。-exec
:对找到的文件执行命令。-ok
:类似于-exec
,但在执行前询问确认。
例子
- 查找当前目录下所有的
.txt
文件:
find . -name "*.txt"
- 查找
/etc
目录下所有以conf
结尾的文件,并忽略大小写:
find /etc -iname "*conf"
- 查找
/var/log
下所有普通文件,其大小大于 1MB:
find /var/log -type f -size +1M
- 查找
/home
目录下最后修改时间在 7 天之前的文件:
find /home -type f -mtime +7
- 查找
/usr/bin
中所有由用户root
拥有的文件:
find /usr/bin -user root
- 使用
-exec
对每个找到的文件执行命令,例如删除所有.bak
文件:
find . -name "*.bak" -exec rm {} \;
- 使用
-ok
来安全地删除文件,每次删除前询问用户:
find . -name "*.bak" -ok rm {} \;
- 注意事项
- 当使用
-exec
或-ok
时,通常需要在命令的末尾加上\;
来结束表达式。 - 如果
-exec
后面的命令接受多个参数,则可能会遇到问题,此时可以考虑使用xargs
:
find . -name "*.bak" -print0 | xargs -0 rm