diff --git a/dot_local/bin/executable_clean-system b/dot_local/bin/executable_clean-system index b0aaca5..ed00217 100644 --- a/dot_local/bin/executable_clean-system +++ b/dot_local/bin/executable_clean-system @@ -1,25 +1,13 @@ #!/usr/bin/env bash # clean-system — безопасная интерактивная очистка системы -set -euo pipefail +set -eo pipefail _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 _register() { @@ -37,7 +25,7 @@ _register pacman-cache \ _register paru-cache \ "Paru build кеш" \ "$HOME/.cache/paru" \ - paru -Sc --noconfirm + yes | paru -Sc _register uv-cache \ "uv (Python) кеш" \ @@ -75,30 +63,23 @@ _register pip-cache \ pip3 cache purge _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() { if ! command -v fzf &>/dev/null; then - echo "fzf not found" - exit 1 + echo "fzf not found"; exit 1 fi - local ORDERED=(pacman-cache paru-cache uv-cache npm-cache cargo-cache - restic-cache thumbnails journal pip-cache zsh-compdump) - local lines=() for id in "${ORDERED[@]}"; do - local size="" - local path="${TASK_PATH[$id]}" - if [[ -n "$path" && ( -d "$path" || -f "$path" ) ]]; then - size=$(_size "$path") - else - size="—" - fi + local path="${TASK_PATH[$id]:-}" + local size + size=$( [[ -n "$path" ]] && _size "$path" || echo "—" ) lines+=("$(printf "%-14s %6s %s" "$id" "$size" "${TASK_DESC[$id]}")") done @@ -113,26 +94,22 @@ main() { [[ -z "$selected" ]] && exit 0 - local total_freed=0 - while IFS= read -r line; do local id - id=$(echo "$line" | awk '{print $1}') - local path="${TASK_PATH[$id]}" + id=$(awk '{print $1}' <<< "$line") + local path="${TASK_PATH[$id]:-}" local before="" - [[ -n "$path" && ( -d "$path" || -f "$path" ) ]] && before=$(_size "$path") + [[ -n "$path" ]] && before=$(_size "$path") echo "" - echo "▶ ${TASK_DESC[$id]}" + echo "▶ ${TASK_DESC[$id]} ${before:+(было: $before)}" eval "${TASK_CMD[$id]}" || true if [[ -n "$path" && -n "$before" ]]; then local after after=$(_size "$path") - local freed - freed=$(_freed "$before" "$after") - echo " → освобождено: $freed" + echo " → стало: $after" fi done <<< "$selected"