You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求简化Unix脚本:输出3个最大目录及其3个最大子目录

简化版脚本及原脚本解析

简化版脚本

支持直接传入目标路径,无需修改脚本内部,执行时可指定路径(如./top_dirs.sh /log),默认处理/var:

#!/bin/bash
# 目标路径,默认/var,可通过第一个参数指定
TARGET_DIR="${1:-/var}"

echo "=== ${TARGET_DIR} 下前3大的目录 ==="
# 获取目标路径下前3大的目录,逐行处理
du -sh "${TARGET_DIR}"/* 2>/dev/null | sort -hr | head -3 | while read -r size dir; do
    echo "${size} ${dir}"
    # 输出当前目录下前3大的子目录,添加缩进区分层级
    echo -e "\t=== ${dir} 下前3大的子目录 ==="
    du -sh "${dir}"/* 2>/dev/null | sort -hr | head -3 | sed 's/^/\t/'
    echo ""
done

原脚本问题解析

  1. 临时文件冗余且易冲突:用脚本名生成临时文件名,多实例运行会互相覆盖,且脚本结束后未清理临时文件,会残留垃圾文件。
  2. 路径处理不严谨:通过for dir in $(cat ...)读取路径,若目录名含空格会被拆分,导致后续du命令执行错误。
  3. 改路径出错的常见原因:
    • 硬编码/var,改路径时需多处修改,容易漏改导致逻辑混乱;
    • 若/log无访问权限或不存在,du的错误被丢弃,但后续空内容处理会引发异常。
  4. 冗余函数:top3函数用awk提取路径,实际上du输出的第二列就是完整路径,直接读取更高效。

使用说明

  1. 给脚本添加执行权限:chmod +x top_dirs.sh
  2. 查看默认路径(/var)的目录:./top_dirs.sh
  3. 查看指定路径(如/log)的目录:./top_dirs.sh /log

内容的提问来源于stack exchange,提问作者ascii1118

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:05:32