用于生成特定目录中文件和目录大小的报告,并按大小从大到小排序。用户可以指定目标目录作为参数,并选择是否在报告中包含单个文件的详细信息或仅显示目录的总大小。
Bash 脚本
#!/bin/bash
# 检查是否提供了至少一个参数
if [ $# -lt 1 ]; then
echo "用法:$0 目录 [detailed]"
echo "示例:"
echo " ./report_sizes.sh /path/to/directory" # 仅显示目录大小
echo " ./report_sizes.sh /path/to/directory detailed" # 包含文件详细信息
exit 1
fi
# 获取参数
directory=$1
mode=$2 # "detailed" 表示包含文件详细信息,其他值表示仅显示目录大小
# 检查目录是否存在
if [ ! -d "$directory" ]; then
echo "指定的目录不存在。"
exit 1
fi
# 生成报告
if [ "$mode" = "detailed" ]; then
echo "正在生成包含文件详细信息的报告:$directory"
du -ah "$directory" | sort -hr | head -n 50
else
echo "正在生成仅包含目录大小的报告:$directory"
du -sh "$directory"/* 2>/dev/null | sort -hr | head -n 50
fi
echo "报告生成完成。"
使用说明
将脚本内容保存到一个文件中,例如 report_sizes.sh。
给文件添加执行权限:
chmod +x report_sizes.sh
运行脚本时,提供目标目录作为参数,可选地添加 detailed 以获取包含文件详细信息的报告。例如:
- 仅生成目录大小报告:
- ./report_sizes.sh /path/to/directory
- 生成包含文件详细信息的报告:
- ./report_sizes.sh /path/to/directory detailed
脚本说明
- 参数检查:确保用户至少提供一个参数(目标目录),并检查是否提供了第二个参数(detailed)。
- 目录检查:验证目标目录是否存在,不存在则提示并退出。
- 报告生成:
- 如果模式为 detailed,使用 du -ah 生成包含文件和目录大小的详细报告。
- 如果模式为其他值,使用 du -sh 生成仅包含目录大小的报告。
- 使用 sort -hr 按大小从大到小排序,并通过 head -n 50 限制输出数量为前 50 条。
- 错误处理:在生成目录大小报告时,使用 2>/dev/null 忽略 du 命令可能产生的错误信息(例如,某些目录没有读取权限)。