#!/bin/bash if ! command -v gum &> /dev/null; then echo "Ошибка: 'gum' не установлен. Установите его: https://github.com/charmbracelet/gum" exit 1 fi DIR="${1}" if [[ -z "$DIR" || ! -d "$DIR" ]]; then echo "Использование: $0 /путь/к/каталогу" exit 1 fi echo "Анализируем каталог: $DIR" echo biggest_files=$(find "$DIR" -type f -exec du -b {} + 2>/dev/null \ | sort -nr | head -n 10 \ | awk '{printf "[BIG] %s (%s байт)\n", $2, $1}') oldest_files=$(find "$DIR" -type f -printf "%T@ %p\n" 2>/dev/null \ | sort -n | head -n 10 \ | while read -r line; do timestamp=$(echo "$line" | cut -d' ' -f1) filepath=$(echo "$line" | cut -d' ' -f2-) humandate=$(date -d @"$timestamp" +"%Y-%m-%d %H:%M:%S") printf "[OLD] %s (%s)\n" "$filepath" "$humandate" done) combined=$(printf "%s\n%s\n%s\n%s" \ "------ 🔠 10 САМЫХ БОЛЬШИХ ФАЙЛОВ ------" \ "$biggest_files" \ "------ 🕒 10 САМЫХ СТАРЫХ ФАЙЛОВ ------" \ "$oldest_files") echo "🧹 Выберите файлы для удаления:" selected=$(echo "$combined" | gum choose --no-limit --height=22) to_delete=$(echo "$selected" \ | grep -v '^------' \ | sed -E 's/^\[(BIG|OLD)\] //' \ | sed -E 's/ \(([^)]*)\)$//' \ | sort -u) # Подтверждение if [[ -z "$to_delete" || "$to_delete" == $'\n' ]]; then echo "❌ Ничего не выбрано для удаления." exit 0 fi echo echo "❗️Файлы, которые будут удалены:" echo "$to_delete" gum confirm "Вы действительно хотите удалить эти файлы?" && echo "$to_delete" | xargs -d '\n' rm -f && echo "✅ Удаление завершено."