Spaces:
Paused
Paused
lanny xu
commited on
Commit
·
95a1f44
1
Parent(s):
87ec2c5
check disk usage
Browse files- check_disk_usage.sh +146 -0
check_disk_usage.sh
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
# 磁盘空间占用检测脚本
|
| 4 |
+
# 用于检测指定目录下所有文件和文件夹的大小,并按大小倒序排列
|
| 5 |
+
|
| 6 |
+
# 颜色定义
|
| 7 |
+
RED='\033[0;31m'
|
| 8 |
+
GREEN='\033[0;32m'
|
| 9 |
+
YELLOW='\033[1;33m'
|
| 10 |
+
BLUE='\033[0;34m'
|
| 11 |
+
NC='\033[0m' # No Color
|
| 12 |
+
|
| 13 |
+
# 默认参数
|
| 14 |
+
DIRECTORY="${1:-$HOME}"
|
| 15 |
+
TOP_N="${2:-100}"
|
| 16 |
+
SHOW_HIDDEN=true
|
| 17 |
+
|
| 18 |
+
# 帮助信息
|
| 19 |
+
show_help() {
|
| 20 |
+
echo "用法: $0 [目录路径] [显示数量]"
|
| 21 |
+
echo ""
|
| 22 |
+
echo "参数:"
|
| 23 |
+
echo " 目录路径 要扫描的目录 (默认: 当前用户主目录)"
|
| 24 |
+
echo " 显示数量 显示前N个最大的文件 (默认: 100)"
|
| 25 |
+
echo ""
|
| 26 |
+
echo "选项:"
|
| 27 |
+
echo " -h, --help 显示此帮助信息"
|
| 28 |
+
echo ""
|
| 29 |
+
echo "示例:"
|
| 30 |
+
echo " $0 # 扫描主目录,显示前100个最大文件"
|
| 31 |
+
echo " $0 ~ 50 # 扫描主目录,显示前50个最大文件"
|
| 32 |
+
echo " $0 /Users/pro 200 # 扫描指定目录,显示前200个最大文件"
|
| 33 |
+
echo " $0 ~/Library 100 # 扫描Library目录"
|
| 34 |
+
echo ""
|
| 35 |
+
echo "常见大文件目录:"
|
| 36 |
+
echo " ~/Library # 应用程序缓存和数据"
|
| 37 |
+
echo " ~/Downloads # 下载文件"
|
| 38 |
+
echo " ~/Documents # 文档"
|
| 39 |
+
echo " ~/Desktop # 桌面"
|
| 40 |
+
echo " ~/Movies # 视频文件"
|
| 41 |
+
echo " ~/Pictures # 图片文件"
|
| 42 |
+
echo ""
|
| 43 |
+
echo "提示: 此脚本会扫描所有文件(包括隐藏文件),可能需要较长时间"
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
# 解析参数
|
| 47 |
+
while [[ $# -gt 0 ]]; do
|
| 48 |
+
case $1 in
|
| 49 |
+
-h|--help)
|
| 50 |
+
show_help
|
| 51 |
+
exit 0
|
| 52 |
+
;;
|
| 53 |
+
*)
|
| 54 |
+
if [ -z "$DIR_SET" ]; then
|
| 55 |
+
DIRECTORY="$1"
|
| 56 |
+
DIR_SET=true
|
| 57 |
+
elif [ -z "$NUM_SET" ]; then
|
| 58 |
+
TOP_N="$1"
|
| 59 |
+
NUM_SET=true
|
| 60 |
+
fi
|
| 61 |
+
shift
|
| 62 |
+
;;
|
| 63 |
+
esac
|
| 64 |
+
done
|
| 65 |
+
|
| 66 |
+
# 展开路径
|
| 67 |
+
DIRECTORY="${DIRECTORY/#\~/$HOME}"
|
| 68 |
+
|
| 69 |
+
# 检查目录是否存在
|
| 70 |
+
if [ ! -d "$DIRECTORY" ]; then
|
| 71 |
+
echo -e "${RED}错误: 目录不存在: $DIRECTORY${NC}"
|
| 72 |
+
exit 1
|
| 73 |
+
fi
|
| 74 |
+
|
| 75 |
+
echo -e "${GREEN}========================================================${NC}"
|
| 76 |
+
echo -e "${YELLOW}正在扫描目录: $DIRECTORY${NC}"
|
| 77 |
+
echo -e "${YELLOW}显示前 $TOP_N 个最大的文件(包括所有隐藏文件)${NC}"
|
| 78 |
+
echo -e "${GREEN}========================================================${NC}"
|
| 79 |
+
echo ""
|
| 80 |
+
echo -e "${BLUE}请稍候,正在扫描所有文件并计算大小...${NC}"
|
| 81 |
+
echo -e "${BLUE}这可能需要几分钟时间,请耐心等待...${NC}"
|
| 82 |
+
echo ""
|
| 83 |
+
|
| 84 |
+
# 临时文件
|
| 85 |
+
TEMP_FILE=$(mktemp)
|
| 86 |
+
|
| 87 |
+
# 扫描目录下的所有文件(包括隐藏文件)
|
| 88 |
+
# 使用 find 命令查找所有文件,然后计算每个文件的大小
|
| 89 |
+
find "$DIRECTORY" -type f -exec du -k {} + 2>/dev/null | sort -rn > "$TEMP_FILE"
|
| 90 |
+
|
| 91 |
+
# 打印表头
|
| 92 |
+
echo -e "${GREEN}========================================================${NC}"
|
| 93 |
+
printf "${YELLOW}%-15s %-s${NC}\n" "大小" "文件路径"
|
| 94 |
+
echo -e "${GREEN}========================================================${NC}"
|
| 95 |
+
|
| 96 |
+
# 计数器
|
| 97 |
+
count=0
|
| 98 |
+
total_size=0
|
| 99 |
+
|
| 100 |
+
# 读取并显示结果
|
| 101 |
+
while IFS=$'\t' read -r size path; do
|
| 102 |
+
count=$((count + 1))
|
| 103 |
+
total_size=$((total_size + size))
|
| 104 |
+
|
| 105 |
+
# 转换大小为人类可读格式
|
| 106 |
+
if [ $size -lt 1024 ]; then
|
| 107 |
+
readable_size="${size} KB"
|
| 108 |
+
elif [ $size -lt 1048576 ]; then
|
| 109 |
+
readable_size=$(awk "BEGIN {printf \"%.2f MB\", $size/1024}")
|
| 110 |
+
elif [ $size -lt 1073741824 ]; then
|
| 111 |
+
readable_size=$(awk "BEGIN {printf \"%.2f GB\", $size/1048576}")
|
| 112 |
+
else
|
| 113 |
+
readable_size=$(awk "BEGIN {printf \"%.2f TB\", $size/1073741824}")
|
| 114 |
+
fi
|
| 115 |
+
|
| 116 |
+
# 打印结果
|
| 117 |
+
printf "%-15s %s\n" "$readable_size" "$path"
|
| 118 |
+
|
| 119 |
+
# 达到指定数量后退出
|
| 120 |
+
if [ $count -ge $TOP_N ]; then
|
| 121 |
+
break
|
| 122 |
+
fi
|
| 123 |
+
done < "$TEMP_FILE"
|
| 124 |
+
|
| 125 |
+
# 打印总计
|
| 126 |
+
echo -e "${GREEN}========================================================${NC}"
|
| 127 |
+
|
| 128 |
+
# 转换总大小
|
| 129 |
+
if [ $total_size -lt 1024 ]; then
|
| 130 |
+
total_readable="${total_size} KB"
|
| 131 |
+
elif [ $total_size -lt 1048576 ]; then
|
| 132 |
+
total_readable=$(awk "BEGIN {printf \"%.2f MB\", $total_size/1024}")
|
| 133 |
+
elif [ $total_size -lt 1073741824 ]; then
|
| 134 |
+
total_readable=$(awk "BEGIN {printf \"%.2f GB\", $total_size/1048576}")
|
| 135 |
+
else
|
| 136 |
+
total_readable=$(awk "BEGIN {printf \"%.2f TB\", $total_size/1073741824}")
|
| 137 |
+
fi
|
| 138 |
+
|
| 139 |
+
echo -e "${YELLOW}总计 (前$count个文件): $total_readable${NC}"
|
| 140 |
+
echo -e "${GREEN}========================================================${NC}"
|
| 141 |
+
|
| 142 |
+
# 清理临时文件
|
| 143 |
+
rm -f "$TEMP_FILE"
|
| 144 |
+
|
| 145 |
+
echo ""
|
| 146 |
+
echo -e "${BLUE}提示: 使用 '$0 --help' 查看更多选项${NC}"
|