概述
在 Linux 系统中,find 命令是一个功能强大且使用频繁的工具,它能够以递归方式在目录树中查找满足特定条件的文件和目录。无论是按名称、大小、类型、所有者还是其他属性进行搜索,find 都能提供精细化的查找能力。
常用参数详解
基本用法与递归查找
不设置任何参数时,find 命令默认在当前目录及其子目录中查找所有文件和目录,并显示结果。
find # 查找当前目录下的所有子目录和文件
find /boot # 在 /boot 目录及其子目录中查找

Linux find 命令用于在目录树中递归查找文件和目录,支持按名称、大小、类型、所有者、权限及时间等属性筛选。通过组合参数如-name、-size、-type 及逻辑运算符,可实现精细化搜索。结合-exec 或 xargs 能对结果执行批量操作,适用于清理日志、备份管理等生产场景,是系统维护的高效工具。
在 Linux 系统中,find 命令是一个功能强大且使用频繁的工具,它能够以递归方式在目录树中查找满足特定条件的文件和目录。无论是按名称、大小、类型、所有者还是其他属性进行搜索,find 都能提供精细化的查找能力。
不设置任何参数时,find 命令默认在当前目录及其子目录中查找所有文件和目录,并显示结果。
find # 查找当前目录下的所有子目录和文件
find /boot # 在 /boot 目录及其子目录中查找

使用 -name 参数可以根据文件名进行匹配,支持通配符 *(匹配多个字符)和 ?(匹配单个字符)。建议将模式用双引号括起来,避免 shell 扩展干扰。
find /etc -name "resol*.conf" # 查找/etc下里以 "resol" 开头、".conf" 结尾的文件
find /home -name "*.txt" # 查找/home下所有 .txt 结尾的文件
find /home -name "[A-Z]*" # 查找/home下以大写字母开头的文件
find /boot -name "test*" # 查找/boot下以 "test" 开头的文件

根据文件大小进行查找,支持 +(大于)、-(小于)和不带符号(等于)的条件:
find /etc -size +4M # 查找/etc下大于 4MB 的文件(不包括 4MB)
find /etc -size 4M # 查找/etc下等于 4MB 的文件(实际范围:3MB 到 4MB,不包括 3MB)
find /home -size -1M # 查找/home下小于 1MB 的文件(包括 1MB)

注意:
-size +4M 表示大于 4MB,不包括 4MB;
-size 4M 表示 3MB 到 4MB 之间(不包括 3MB);
-size -1M 表示小于等于 1MB。
根据文件类型进行筛选,常见的类型包括:
f:普通文件d:目录b:块设备文件(如硬盘)c:字符设备文件(如键盘、鼠标)l:符号链接文件find /boot -type d # 查找 /boot 下的所有目录
find /etc/yum.repos.d/ !-type d # 查找/etc/yum.repos.d/下的非目录(即文件)
find /var -type l # 查找 /var 下的符号链接文件

结合 xargs 进行批量操作:
# 将目录权限递归设置为 755,文件权限设置为 644
find /data -type d | xargs chmod 755 -R
find /data -type f | xargs chmod 644 -R
根据文件所有者或所属用户组进行查找:
find /home -user username # 查找属于用户 "username" 的文件
find /home -user username -group groupname # 同时匹配用户和组
使用逻辑运算符组合多个条件:
-a 或 -and:同时满足多个条件(可省略,默认即为'与')-o 或 -or:满足任意一个条件-not 或 !:取反,排除条件find /mnt -user root -a -size +5M # 属于 root 且大于 5MB
find /mnt -user root -o -size +5M # 属于 root 或大于 5MB
find /mnt -not -user root # 不属于 root 的文件
根据文件权限进行精确或模糊匹配:
find /bin -perm 755 # 权限恰好为 755 的文件或目录
find /bin -perm -644 # 至少具有 644 权限(即包含 644 及以上)
根据文件的访问时间(atime)、内容修改时间(mtime)和属性修改时间(ctime)进行查找(单位为'天'),对应分钟单位为 -amin、-mmin、-cmin:
# 查找 5 天内修改过的 syslog 压缩文件
find ./ -name "syslog.*.gz" -mtime -5 -exec ls -lh {} \;
# 查找 5 天前修改的文件
find ./ -name "*.txt" -mtime +5
对查找到的结果执行进一步操作,如删除、归档、权限修改等:
# 删除当前目录下所有 .txt 文件
find ./ -name "*.txt" -exec rm {} \;
# 查找含 "bin" 字符串的 .txt 文件
find ./ -name "*.txt" -exec grep "bin" {} \;
# 结合 xargs 提高效率(处理大量文件时更高效)
find ./ -maxdepth 1 -type f -print0 | xargs -0 ls -lh
注意:-exec 必须以 \; 结尾,{} 代表查找到的文件名。
定期清理备份和日志文件是系统管理的常见任务,以下是一些实用示例:
# 删除备份目录下的所有 .log 和 .dmp 文件
find /backup -type f -name "*.log" -exec rm {} \;
find /backup -type f -name "*.dmp" -exec rm {} \;
# 删除 5 天前的 .tar.gz 备份文件
find /backup -type f -name "*.tar.gz" -mtime +5 -exec rm -rf {} \;
find 命令是 Linux 系统中不可或缺的文件查找与管理工具,其灵活的选项和组合条件能够满足各种复杂需求。通过掌握按名称、大小、类型、时间等属性进行查找的技巧,并结合 -exec 或 xargs 进行批量操作,可以极大提升系统管理和维护的效率。建议在实际使用中多加练习,灵活运用各种参数,以便更好地驾驭这一强大工具。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online