find命令是Unix/Linux系统中一个功能强大且灵活的命令行工具,用于在目录结构中搜索文件和目录。它不仅能够根据文件名、类型、大小、修改时间等属性进行搜索,还可以对搜索结果执行各种操作,如删除、移动、复制等。这使得find命令成为系统管理员和开发人员日常工作中不可或缺的工具。
工作特点
- 查找速度略慢
- 精确查找
- 实时查找
- 查找条件丰富
- 只搜索用户具备读取和执行权限的目录
命令介绍
命令格式:
find [搜索路径] [选项] [表达式]
搜索路径:指定find命令开始搜索的目录。可以是一个或多个路径。不指定路径,表示当前路径。
选项:用于定义搜索的条件,如文件名、文件类型、大小、时间等。
表达式:用于进一步细化搜索条件,可以与选项组合使用来构建复杂的搜索逻辑。
常用选项
-name:按文件名匹配,区分大小写。支持使用glob,如:*, ?, [], [^],通配符要加双引号引起来
-type:按文件类型搜索。常用类型包括f(普通文件)、d(目录)、l(符号链接)等。
-size:按文件大小搜索。单位可以是c(字节)、k(千字节)、M(兆字节)、G(千兆字节)等。例如,-size +10M查找大于10MB的文件。
-mtime:按天数查找文件最后修改时间。例如,-mtime -7查找最近7天内修改的文件。
-user:按文件所有者查找。
-group:按文件所属组查找。
-perm:按文件权限查找。
-maxdepth:限制搜索的最大深度。
-mindepth:限制搜索的最小深度。
-regextype type: 正则表达式类型,emacs|posix-awk|posix-basic|posix-egrep|posix-extended
-regex pattern: 正则表达式
一般选项
-iname name # 不区分字母大小写
-inum number # 按inode号查找
-samefile name # 相同inode号的文件
-links n # 链接数为n的文件
-regex "PATTERN" # 以PATTERN匹配整个文件路径,而非文件名称
find命令支持使用逻辑操作符(如-and、-or、-not)来组合多个搜索条件,以构建复杂的搜索逻辑。此外,还可以使用括号来分组条件,但括号需要被转义或使用引号括起来。
搜索结果的处理
除了搜索功能外,find命令还可以对搜索结果执行各种操作。常用的操作选项包括:
-print:打印搜索结果(默认行为)。
-exec:对每个匹配的文件执行指定的命令。命令以{}代表当前文件,命令结尾以 ;或 +结束。注意转义符
-ok:与-exec类似,但在执行每个命令前都会提示用户确认。
-delete:直接删除匹配的文件或目录(使用时要小心)。
-ls:以ls -dils的格式显示匹配的文件。
示例
备份以log结尾的文件
root@ubuntu24:find# find -name "*log" -exec cp {} {}.bak \;
删除15分钟内没被访问过的文件
find -amin +15 -ok rm {} \;
批量改名
find -type f -name "*.bak" -exec mv {} ./bak/ \;
find ./ -name "*.bak" -exec rename 's/.bak$//' {} \;
批量查找文件作内容替换
find ./ -type f -name consumer.xml -exec sed -i "s/aaa/bbb/g" {} \;
xargs结合使用
find ./ -name "*.txt" | xargs -I {} rename 's/.txt$//' {}
find -name "f*" -exec mv {} {}-bak \;
find ./ -name "*-bak" | xargs rename 's/-bak$//'
find -name "f*" -exec mv {} {}.txt \;
find ./ -name "*.txt" | xargs rename 's/.txt$//' {}
find ./ -name "*.bak" | xargs rename ".bak" ".txt"
批量查找文件然后拷贝打包
(find . -name "*.txt" | xargs tar -cvf test.tar) && cp -f test.tar /home/作者:于浩 创建时间:2026-06-05 11:03
最后编辑:于浩 更新时间:2026-07-12 22:32
最后编辑:于浩 更新时间:2026-07-12 22:32