侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

统计目录下普通文件数量

2025-12-11 / 0 评论 / 4 阅读

题目

统计目录下普通文件数量

信息

  • 类型:问答
  • 难度:⭐

考点

目录遍历, 条件判断, 变量操作

快速回答

使用for循环遍历目录,通过-f判断普通文件并计数:

  • 初始化计数器变量
  • 遍历目录项检查文件类型
  • 排除子目录干扰
  • 输出最终计数结果
## 解析

问题目标

编写Shell脚本统计指定目录中普通文件的数量(不包括子目录和特殊文件)。

核心原理

通过循环遍历目录中的每个条目,使用-f测试运算符判断是否为普通文件,并对符合条件的文件进行计数。

代码示例

#!/bin/bash
dir_path="${1:-.}"  # 使用第一个参数或当前目录
count=0

for item in "$dir_path"/*; do
    if [ -f "$item" ]; then
        ((count++))
    fi
done

echo "普通文件数量: $count"

最佳实践

  • 参数处理:使用${1:-.}设置默认当前目录
  • 引号包裹:变量用双引号包裹(如"$dir_path"/*)避免空格问题
  • 明确计数:使用((count++))算术运算替代let或外部命令
  • 错误处理:可增加目录存在性检查:
    [ ! -d "$dir_path" ] && echo "错误:目录不存在" && exit 1

常见错误

  • 未处理隐藏文件:模式/*不匹配.开头的文件,需改为"$dir_path"/* "$dir_path"/.*并排除...
  • 包含子目录:误用-e(存在即计数)而非-f
  • 空格问题:变量未加引号导致路径含空格时被拆分成多个参数
  • 符号链接-f会统计指向普通文件的链接,若需排除可增加! -L判断

扩展知识

  • 替代方案:使用find命令更高效:
    find "$dir_path" -maxdepth 1 -type f -printf . | wc -c
  • 文件类型检测
    -f:普通文件
    -d:目录
    -L:符号链接
    -e:存在即可
  • 性能考量:对于超大目录,find方案比Shell循环更高效
  • 递归统计:移除-maxdepth 1可统计子目录文件