Skip to content

Commit d348ee5

Browse files
authored
Update replace_icons.sh
1 parent 55aa281 commit d348ee5

1 file changed

Lines changed: 100 additions & 64 deletions

File tree

replace_icons.sh

Lines changed: 100 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#!/bin/bash
22

3+
# === 配置 ===
34
LOG_FILE="/var/log/icon_replace_$(date +%Y%m%d_%H%M%S).log"
45
TARGET_DIR="/ugreen/static/icons"
56
REPO_MAIN="https://github.com/zeyu8023/ugreen-icon-replacer"
@@ -8,14 +9,46 @@ ZIP_PATH="/archive/refs/heads/main.zip"
89
ZIP_FILE="icons.zip"
910
CONFIG_FILE="$HOME/.ugreen_icon_config"
1011

11-
echo "请选择图标来源:"
12-
echo "1) 使用 GitHub 项目中的图标(推荐)"
13-
echo "2) 使用本地图标目录"
14-
read -p "请输入数字 [1/2]:" SOURCE_CHOICE
12+
# 🗃️ 缓存配置
13+
CACHE_DIR="${UGREEN_ICON_CACHE_DIR:-$HOME/.ugreen_icon_cache}"
14+
CACHE_ZIP="$CACHE_DIR/main.zip"
15+
CACHE_TIMESTAMP="$CACHE_DIR/main.zip.timestamp"
16+
17+
# === 主功能菜单 ===
18+
echo "🧩 请选择操作功能:"
19+
echo "1) 从 GitHub 下载并替换图标"
20+
echo "2) 使用本地图标目录替换图标"
21+
echo "3) 清理图标缓存目录(当前缓存:$(du -sh "$CACHE_DIR" 2>/dev/null | cut -f1 || echo 0B)"
22+
echo "4) 退出程序"
23+
read -p "请输入数字 [1-4]:" MENU_CHOICE
24+
25+
case "$MENU_CHOICE" in
26+
1) SOURCE_CHOICE="1" ;;
27+
2) SOURCE_CHOICE="2" ;;
28+
3)
29+
if [[ -d "$CACHE_DIR" ]]; then
30+
SIZE=$(du -sh "$CACHE_DIR" 2>/dev/null | cut -f1)
31+
echo "🧺 当前缓存大小:$SIZE"
32+
read -p "是否确认清空缓存目录?(y/n): " CONFIRM
33+
if [[ "$CONFIRM" =~ ^[yY]$ ]]; then
34+
rm -rf "$CACHE_DIR"
35+
echo "✅ 缓存已清空。"
36+
else
37+
echo "🚫 已取消清理操作。"
38+
fi
39+
else
40+
echo "📁 当前无缓存,无需清理。"
41+
fi
42+
exit 0
43+
;;
44+
4) echo "👋 程序已退出。"; exit 0 ;;
45+
*) echo "❌ 输入无效,程序已退出。"; exit 1 ;;
46+
esac
1547

48+
# === 图标来源选择 ===
1649
if [[ "$SOURCE_CHOICE" == "1" ]]; then
1750
echo "🎨 请选择图标风格:"
18-
echo "1) iOS 26 液态玻璃(乐小宇制作"
51+
echo "1) iOS 26 液态玻璃(乐小宇"
1952
echo "2) 锤子 OS(Sunny 整理)"
2053
echo "3) 拟物毛玻璃(Sunny 制作)"
2154
echo "4) 绿联毛玻璃(Sunny 制作)"
@@ -34,54 +67,63 @@ if [[ "$SOURCE_CHOICE" == "1" ]]; then
3467
mkdir -p "$TMP_DIR"
3568
cd "$TMP_DIR" || exit 1
3669

37-
echo "🌐 正在尝试从主站下载 ZIP 包..."
38-
curl -sL --max-time 10 "$REPO_MAIN$ZIP_PATH" -o "$ZIP_FILE"
39-
if [[ $? -ne 0 || ! -s "$ZIP_FILE" ]]; then
40-
echo "⚠️ 主站失败,尝试镜像源..."
41-
curl -sL --max-time 20 "$REPO_MIRROR$ZIP_PATH" -o "$ZIP_FILE"
42-
fi
70+
mkdir -p "$CACHE_DIR"
71+
USE_CACHE=false
4372

44-
if [[ $? -ne 0 || ! -s "$ZIP_FILE" ]]; then
45-
echo "⚠️ 下载失败,可能网络受限或 GitHub 被阻断。"
73+
if [[ -f "$CACHE_ZIP" ]]; then
74+
echo "💡 检测到缓存:$CACHE_ZIP"
75+
read -p "是否使用本地缓存图标包?(y/n): " USE_CACHE_ANSWER
76+
if [[ "$USE_CACHE_ANSWER" =~ ^[yY]$ ]]; then
77+
USE_CACHE=true
78+
cp "$CACHE_ZIP" "$ZIP_FILE"
79+
fi
80+
fi
4681

47-
[[ -f "$CONFIG_FILE" ]] && LAST_PROXY=$(grep "^proxy=" "$CONFIG_FILE" | cut -d '=' -f2)
82+
if [[ "$USE_CACHE" == false ]]; then
83+
echo "🌐 正在下载 ZIP 包..."
84+
curl -sL --max-time 20 "$REPO_MAIN$ZIP_PATH" -o "$CACHE_ZIP"
85+
if [[ $? -ne 0 || ! -s "$CACHE_ZIP" ]]; then
86+
echo "⚠️ 主站失败,尝试镜像源..."
87+
curl -sL --max-time 20 "$REPO_MIRROR$ZIP_PATH" -o "$CACHE_ZIP"
88+
fi
4889

49-
while true; do
50-
if [[ -n "$LAST_PROXY" ]]; then
51-
echo "🧩 检测到上次使用的代理:$LAST_PROXY"
52-
read -p "是否继续使用该代理?(y/n): " USE_LAST
53-
if [[ "$USE_LAST" =~ ^[yY]$ ]]; then
54-
PROXY="$LAST_PROXY"
90+
if [[ $? -ne 0 || ! -s "$CACHE_ZIP" ]]; then
91+
[[ -f "$CONFIG_FILE" ]] && LAST_PROXY=$(grep "^proxy=" "$CONFIG_FILE" | cut -d '=' -f2)
92+
while true; do
93+
if [[ -n "$LAST_PROXY" ]]; then
94+
echo "🧩 上次代理:$LAST_PROXY"
95+
read -p "是否复用该代理?(y/n): " USE_LAST
96+
[[ "$USE_LAST" =~ ^[yY]$ ]] && PROXY="$LAST_PROXY"
5597
fi
56-
fi
5798

58-
while [[ -z "$PROXY" ]]; do
59-
read -p "🌐 请输入代理地址(如 http://127.0.0.1:7890,留空取消): " PROXY
60-
[[ -z "$PROXY" ]] && echo "🚫 未输入代理地址,已退出。" && exit 1
61-
[[ "$PROXY" =~ ^(http|socks5h):// ]] || { echo "⚠️ 格式无效,请重新输入。"; PROXY=""; }
99+
while [[ -z "$PROXY" ]]; do
100+
read -p "🌐 输入代理地址(http://127.0.0.1:7890): " PROXY
101+
[[ -z "$PROXY" ]] && echo "🚫 未输入,退出。" && exit 1
102+
[[ "$PROXY" =~ ^(http|socks5h):// ]] || { echo "⚠️ 格式无效"; PROXY=""; }
103+
done
104+
105+
echo "🔁 使用代理 $PROXY 下载..."
106+
curl -x "$PROXY" -sL --max-time 30 "$REPO_MAIN$ZIP_PATH" -o "$CACHE_ZIP"
107+
if [[ $? -eq 0 && -s "$CACHE_ZIP" ]]; then
108+
echo "✅ 下载成功"
109+
echo "proxy=$PROXY" > "$CONFIG_FILE"
110+
break
111+
else
112+
echo "❌ 下载失败。"
113+
read -p "重试输入代理地址?(y/n): " RETRY
114+
[[ "$RETRY" =~ ^[yY]$ ]] || exit 1
115+
PROXY=""
116+
fi
62117
done
63-
64-
echo "🔁 使用代理 $PROXY 下载..."
65-
curl -x "$PROXY" -sL --max-time 30 "$REPO_MAIN$ZIP_PATH" -o "$ZIP_FILE"
66-
if [[ $? -eq 0 && -s "$ZIP_FILE" ]]; then
67-
echo "✅ 下载成功,保存代理地址..."
68-
echo "proxy=$PROXY" > "$CONFIG_FILE"
69-
break
70-
else
71-
echo "❌ 下载失败,请确认代理是否可用。"
72-
read -p "是否重新输入代理地址?(y/n): " RETRY
73-
[[ "$RETRY" =~ ^[yY]$ ]] || exit 1
74-
PROXY=""
75-
fi
76-
done
77-
else
78-
echo "✅ ZIP 包下载成功!"
118+
fi
119+
cp "$CACHE_ZIP" "$ZIP_FILE"
120+
date +%s > "$CACHE_TIMESTAMP"
79121
fi
80122

81-
# 🔍 检查 unzip 是否存在
123+
# 检查 unzip
82124
if ! command -v unzip &> /dev/null; then
83-
echo "❗ 缺少 unzip 解压工具。"
84-
read -p "是否尝试安装 unzip?(y/n): " INSTALL
125+
echo "❗ 缺少 unzip"
126+
read -p "是否安装 unzip?(y/n): " INSTALL
85127
if [[ "$INSTALL" =~ ^[yY]$ ]]; then
86128
if command -v apt &> /dev/null; then
87129
sudo apt update && sudo apt install -y unzip
@@ -90,46 +132,36 @@ if [[ "$SOURCE_CHOICE" == "1" ]]; then
90132
elif command -v pacman &> /dev/null; then
91133
sudo pacman -Sy unzip
92134
else
93-
echo "⚠️ 未识别的包管理器,请手动安装 unzip。" | tee -a "$LOG_FILE"
94-
exit 1
135+
echo "⚠️ 未知系统,请手动安装 unzip。" && exit 1
95136
fi
96137
else
97-
echo "🚫 未安装 unzip,脚本无法继续执行。" | tee -a "$LOG_FILE"
98-
exit 1
138+
echo "🚫 未安装 unzip,终止脚本。" && exit 1
99139
fi
100140
fi
101141

102142
unzip -q "$ZIP_FILE"
103143
ICON_SOURCE_DIR=$(find . -type d -path "*/icons/$STYLE_FOLDER" | head -n1)
104-
if [ ! -d "$ICON_SOURCE_DIR" ]; then
105-
echo "❌ 未找到 icons/$STYLE_FOLDER 目录。" | tee -a "$LOG_FILE"
106-
exit 1
107-
fi
144+
[[ ! -d "$ICON_SOURCE_DIR" ]] && echo "❌ 找不到图标目录。" && exit 1
108145

109146
elif [[ "$SOURCE_CHOICE" == "2" ]]; then
110147
read -p "请输入本地图标目录路径: " ICON_SOURCE_DIR
111-
if [ ! -d "$ICON_SOURCE_DIR" ]; then
112-
echo "❌ 目录不存在:$ICON_SOURCE_DIR" | tee -a "$LOG_FILE"
113-
exit 1
114-
fi
115-
else
116-
echo "❌ 输入无效,已退出。"
117-
exit 1
148+
[[ ! -d "$ICON_SOURCE_DIR" ]] && echo "❌ 目录不存在。" && exit 1
118149
fi
119150

120-
read -p "是否继续替换图标?此操作不可撤销 (y/n): " CONFIRM
121-
[[ "$CONFIRM" =~ ^[yY]$ ]] || { echo "🚫 操作取消。"; [[ "$SOURCE_CHOICE" == "1" ]] && rm -rf "$TMP_DIR"; exit 0; }
151+
# === 确认替换 ===
152+
read -p "是否继续替换图标?(y/n): " CONFIRM
153+
[[ "$CONFIRM" =~ ^[yY]$ ]] || { echo "🚫 已取消操作。"; [[ "$SOURCE_CHOICE" == "1" ]] && rm -rf "$TMP_DIR"; exit 0; }
122154

123155
{
124-
echo "🕒 替换开始$(date)"
156+
echo "🕒 开始替换$(date)"
125157
echo "📁 图标源目录:$ICON_SOURCE_DIR"
126-
echo "🎯 替换目标目录$TARGET_DIR"
158+
echo "🎯 目标目录$TARGET_DIR"
127159

128160
find "$ICON_SOURCE_DIR" -type f \( -iname "*.png" -o -iname "*.svg" -o -iname "*.jpg" \) | while read -r file; do
129161
filename=$(basename "$file")
130162
target="$TARGET_DIR/$filename"
131163
if [ -f "$target" ]; then
132-
cp "$file" "$target"
164+
cp "$file" "$target"
133165
echo "✅ 替换:$filename"
134166
else
135167
echo "⚠️ 跳过未匹配图标:$filename"
@@ -139,4 +171,8 @@ done
139171
echo "✅ 图标替换完成:$(date)"
140172
} | tee -a "$LOG_FILE"
141173

174+
# 🧹 清理临时目录(仅 GitHub 下载模式下)
142175
[[ "$SOURCE_CHOICE" == "1" ]] && rm -rf "$TMP_DIR"
176+
177+
echo ""
178+
echo "🎉 所有操作已完成!你现在可以刷新界面,查看新的图标样式效果啦~"

0 commit comments

Comments
 (0)