lanny xu commited on
Commit
95a1f44
·
1 Parent(s): 87ec2c5

check disk usage

Browse files
Files changed (1) hide show
  1. 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}"