fix: clean-system — set -u убрал, paru yes|, убрал numfmt
This commit is contained in:
@@ -1,25 +1,13 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# clean-system — безопасная интерактивная очистка системы
|
# clean-system — безопасная интерактивная очистка системы
|
||||||
|
|
||||||
set -euo pipefail
|
set -eo pipefail
|
||||||
|
|
||||||
_size() {
|
_size() {
|
||||||
du -sh "$1" 2>/dev/null | cut -f1 || echo "0"
|
local path=$1
|
||||||
|
[[ -e "$path" ]] && du -sh "$path" 2>/dev/null | cut -f1 || echo "—"
|
||||||
}
|
}
|
||||||
|
|
||||||
_freed() {
|
|
||||||
local before=$1 after=$2
|
|
||||||
# оба в байтах через numfmt
|
|
||||||
local b a
|
|
||||||
b=$(numfmt --from=iec "$before" 2>/dev/null || echo 0)
|
|
||||||
a=$(numfmt --from=iec "$after" 2>/dev/null || echo 0)
|
|
||||||
local diff=$(( b - a ))
|
|
||||||
(( diff > 0 )) && numfmt --to=iec "$diff" || echo "0"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ── Задачи очистки ───────────────────────────────────────────
|
|
||||||
# Формат: "id|описание|команда|путь_для_размера"
|
|
||||||
|
|
||||||
declare -A TASK_CMD TASK_PATH TASK_DESC
|
declare -A TASK_CMD TASK_PATH TASK_DESC
|
||||||
|
|
||||||
_register() {
|
_register() {
|
||||||
@@ -37,7 +25,7 @@ _register pacman-cache \
|
|||||||
_register paru-cache \
|
_register paru-cache \
|
||||||
"Paru build кеш" \
|
"Paru build кеш" \
|
||||||
"$HOME/.cache/paru" \
|
"$HOME/.cache/paru" \
|
||||||
paru -Sc --noconfirm
|
yes | paru -Sc
|
||||||
|
|
||||||
_register uv-cache \
|
_register uv-cache \
|
||||||
"uv (Python) кеш" \
|
"uv (Python) кеш" \
|
||||||
@@ -75,30 +63,23 @@ _register pip-cache \
|
|||||||
pip3 cache purge
|
pip3 cache purge
|
||||||
|
|
||||||
_register zsh-compdump \
|
_register zsh-compdump \
|
||||||
"Zsh completion cache (пересоздастся автоматически)" \
|
"Zsh completion cache" \
|
||||||
"" \
|
"" \
|
||||||
bash -c 'rm -f "$HOME"/.config/zsh/.zcompdump*'
|
rm -f "$HOME/.config/zsh/.zcompdump"
|
||||||
|
|
||||||
# ── Построение меню ──────────────────────────────────────────
|
ORDERED=(pacman-cache paru-cache uv-cache npm-cache cargo-cache
|
||||||
|
restic-cache thumbnails journal pip-cache zsh-compdump)
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
if ! command -v fzf &>/dev/null; then
|
if ! command -v fzf &>/dev/null; then
|
||||||
echo "fzf not found"
|
echo "fzf not found"; exit 1
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local ORDERED=(pacman-cache paru-cache uv-cache npm-cache cargo-cache
|
|
||||||
restic-cache thumbnails journal pip-cache zsh-compdump)
|
|
||||||
|
|
||||||
local lines=()
|
local lines=()
|
||||||
for id in "${ORDERED[@]}"; do
|
for id in "${ORDERED[@]}"; do
|
||||||
local size=""
|
local path="${TASK_PATH[$id]:-}"
|
||||||
local path="${TASK_PATH[$id]}"
|
local size
|
||||||
if [[ -n "$path" && ( -d "$path" || -f "$path" ) ]]; then
|
size=$( [[ -n "$path" ]] && _size "$path" || echo "—" )
|
||||||
size=$(_size "$path")
|
|
||||||
else
|
|
||||||
size="—"
|
|
||||||
fi
|
|
||||||
lines+=("$(printf "%-14s %6s %s" "$id" "$size" "${TASK_DESC[$id]}")")
|
lines+=("$(printf "%-14s %6s %s" "$id" "$size" "${TASK_DESC[$id]}")")
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -113,26 +94,22 @@ main() {
|
|||||||
|
|
||||||
[[ -z "$selected" ]] && exit 0
|
[[ -z "$selected" ]] && exit 0
|
||||||
|
|
||||||
local total_freed=0
|
|
||||||
|
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
local id
|
local id
|
||||||
id=$(echo "$line" | awk '{print $1}')
|
id=$(awk '{print $1}' <<< "$line")
|
||||||
local path="${TASK_PATH[$id]}"
|
|
||||||
|
|
||||||
|
local path="${TASK_PATH[$id]:-}"
|
||||||
local before=""
|
local before=""
|
||||||
[[ -n "$path" && ( -d "$path" || -f "$path" ) ]] && before=$(_size "$path")
|
[[ -n "$path" ]] && before=$(_size "$path")
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "▶ ${TASK_DESC[$id]}"
|
echo "▶ ${TASK_DESC[$id]} ${before:+(было: $before)}"
|
||||||
eval "${TASK_CMD[$id]}" || true
|
eval "${TASK_CMD[$id]}" || true
|
||||||
|
|
||||||
if [[ -n "$path" && -n "$before" ]]; then
|
if [[ -n "$path" && -n "$before" ]]; then
|
||||||
local after
|
local after
|
||||||
after=$(_size "$path")
|
after=$(_size "$path")
|
||||||
local freed
|
echo " → стало: $after"
|
||||||
freed=$(_freed "$before" "$after")
|
|
||||||
echo " → освобождено: $freed"
|
|
||||||
fi
|
fi
|
||||||
done <<< "$selected"
|
done <<< "$selected"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user