find命令–查找和搜索文件
find命令可以根据给定的路径和表达式查找的文件或目录。find参数选项很多,并且支持正则,功能强大。和管道结合使用可以实现复杂的功能,是系统管理者和普通用户必须掌握的命令。
find如不加任何参数,表示查找当前路径下的所有文件和目录,如果服务器负载比较高尽量不要在高峰期使用find命令,find命令模糊搜索还是比较消耗系统资源的。
语法格式:find [参数] [路径] [查找和搜索范围]
find path -option [ -print ] [ -exec -ok command ] {} \;常用参数
-name 按名称查找
-size 按大小查找
-user 按属性查找
-type 按类型查找d: 目录 c: 字型装置文件 b: 区块装置文件 p: 具名贮列 f: 一般文件 l: 符号连结 s: socket
-iname 忽略大小写
-mtime 按时间查找
-exec 执行命令,如果find的回传结果为True,则执行命令
-ok 执行命令令,此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若不回答“y”或“Y”,则放弃执行命令;
exec解释
-exec参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。{}花括号代表前面find查找出来的文件名。
参考实例
find ./*rsync* -mtime +6 -exec rm -rf {} \;
find ./*rsync* -mtime +6 -ok rm -rf {} \; # 删除前询问用户
find ./.*filename # 查找隐藏文件
# 使用-name参数查看/etc目录下面所有的.conf结尾的配置文件:
find /etc -name "*.conf"
# 使用-size参数查看/etc目录下面大于1M的文件:
find /etc -size +1M
# 查找当前用户主目录下的所有文件:
find $HOME -print
# 列出当前目录及子目录下所有文件和文件夹:
find .
# 在/home目录下查找以.txt结尾的文件名:
find /home -name "*.txt"
# 在/var/log目录下忽略大小写查找以.log结尾的文件名:
find /var/log -iname "*.log"
# 搜索超过七天内被访问过的所有文件:
find . -type f -atime +7
# 搜索访问时间超过10分钟的所有文件:
find . -type f -amin +10
# 找出/home下不是以.txt结尾的文件:
find /home ! -name "*.txt"
# 限制目录层级,指定文件类型,过滤文件时间范围
find ./ -maxdepth 1 -type d -mtime +100
# 统计目录下的文件及目录数量,如果不知道目录具体层级数,可以把-maxdepth的值稍微指定大一点
find ./ -maxdepth 50 | wc -l
# 统计目录数量
find ./ -maxdepth 10 -type d | wc -l
# 统计文件数量
find ./ -maxdepth 10 -type f | wc -l
# 指定最小深度
find . -mindepth 3 -type d
# 通过最大深度和最小深度限制在指定深度查找
## 以下命令只会显示当前目录下三级的所有目录,而不会显示一级、二级目录
find . -maxdepth 3 -mindepth 3 -type d
# 查找多个后缀的文件
find /root -type f -regex ".*.\(sh\|log\)"
find mtime参数
atime:访问时间(access time),指的是文件最后被读取的时间,可以使用touch命令更改为当前时间;
ctime:变更时间(change time),指的是文件本身最后被变更的时间,变更动作可以使chmod、chgrp、mv等等;
mtime:修改时间(modify time),指的是文件内容最后被修改的时间,修改动作可以使echo重定向、vi等;
-mtime n 按照文件的更改时间来找文件,n为整数。
n 表示文件更改时间距离为n天
-n 表示文件更改时间距离在n天以内
+n 表示文件更改时间距离在n天以前
例:
-mtime 0 表示文件修改时间距离当前为0天的文件,即距离当前时间不到1天(24小时)以内的文件。
-mtime 1 表示文件修改时间距离当前为1天的文件,即距离当前时间1天(24小时-48小时)的文件。
-mtime+1 表示文件修改时间为大于1天的文件,即距离当前时间2天(48小时)之外的文件
-mtime -1 表示文件修改时间为小于1天的文件,即距离当前时间1天(24小时)之内的文件 为什么-mtime+1 表示文件修改时间为大于1天的文件,即距离当前时间48小时之外的文件,而不是24小时之外的呢? 因为n值只能是整数,即比1大的最近的整数是2,所以-mtime+1不是比当前时间大于1天(24小时),而是比当前时间大于2天(48小时)。
find mmin 为按分钟,参数同上
与该功能相关的Linux命令: SVGATextMode命令 – 加强文字模式的显示画面 modprobe命令 – 内核模块智能加载工具 lilo命令 – 安装核心载入 rht-vmctl命令 – 控制VM esxcfg-vswitch命令 – ESX虚拟交换机管理工具 locale命令 – 设置字符集 virsh命令 – 管理用户界面 runlevel命令 – 显示系统的运行级 rpmlint命令 – 检查rpm软件包中的常见错误 nice命令 – 调整进程的优先级
错误处理
find /media/*.sql -mtime +7 -exec rm -rf {}\;find: 遗漏“-exec”的参数
结尾命令必须以 空格; 格式结尾
find /media/*.sql -mtime +7 -exec rm -rf {} \;最后更新于