最可靠方案是用 find -name "*.log",它只依赖文件名后缀、不依赖内容,可递归查找且无误判漏判;需注意 shell 通配符特性、路径权限及非标准命名场景。

直接用 find -name "*.log" 就行
这是最基础也最可靠的方案,find 本身不依赖文件内容,只看文件名后缀,不会漏掉、也不会误判。只要路径权限允许,它就能递归列出所有匹配项。
常见写法:
-
find . -name "*.log":从当前目录开始搜 -
find /var/log -name "*.log":限定在系统日志目录下,更快更精准 -
find /home -iname "*.log":加-iname忽略大小写,能匹配ERROR.LOG或AccessLog这类非标准命名
注意:* 是 shell 展开的通配符,不是正则;如果路径含空格或特殊字符,建议用单引号包裹 '*.log' 避免被提前解析。
为什么不用 ls *.log?
ls *.log 看似简单,但实际非常危险——它只在当前目录展开,且一旦没有匹配文件,shell 会原样传入 *.log 字符串给 ls,导致报错 ls: cannot access '*.log': No such file or directory。更糟的是,它完全不进子目录,根本不算“查找所有”。
只有当你明确知道所有 .log 文件都在当前层,且数量不多、名字规整时,ls *.log 才勉强可用。其他情况一律绕开。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
查到太多结果?试试 -maxdepth 或 -type f
在大型项目或系统根目录下跑 find / -name "*.log",常会遇到权限拒绝(Permission denied)刷屏,或返回大量设备文件、管道、socket(它们也可能有 .log 后缀但不是真日志)。这时加两个限制很实用:
-
find /var/log -maxdepth 3 -name "*.log":限制最多搜 3 层子目录,避免钻进无意义的嵌套路径 -
find /app -type f -name "*.log":加-type f只匹配普通文件,跳过目录、链接、设备节点
-type f 特别重要——有些构建工具或旧脚本会创建名为 debug.log/ 的目录,find 默认也会列出来,但你显然不想把它当文件打开。
想快速统计总数或按大小排序?
find 本身不提供计数或排序,但配合管道极简实现:
- 总数:
find . -name "*.log" | wc -l - 按大小倒序(显示前10):
find . -type f -name "*.log" -exec stat -c "%s %n" {} \; 2>/dev/null | sort -nr | head -10
注意 stat 在不同系统输出格式略有差异,GNU coreutils 下用 %s 取字节数;macOS 要换成 stat -f "%z %N"。另外 2>/dev/null 是为了屏蔽权限错误,否则会影响排序结果。
真正容易被忽略的是:很多日志文件名不含 .log(比如 access、error、app-20260709),或者用 .out、.err 结尾。如果目标是“所有可能的日志”,光靠 -name "*.log" 会漏掉一大半。得结合业务场景补上其他扩展名,或者先用 file 命令判断文件类型再筛选。










