# Интерактивный инструмент для удаления файлов по расширениям
=> /bash/delete.gmi 🇬🇧 Читать по Английски

Bash-функция позволяет быстро наводить порядок в директориях. Поддерживает поиск сразу по нескольким расширениям, выбор режима (включая скрытые папки или нет) и обязательный этап подтверждения перед удалением.

В код добавлено подробное описание на русском языке — «подарок себе будущему». Даже если ты откроешь этот скрипт через полгода, тебе не придется мучительно вспоминать, зачем он нужен и как работает: вся документация уже встроена в заголовок функции.

```bash
# ==============================================================================
# КОМАНДА: delete
# ОПИСАНИЕ: Поиск и интерактивное удаление файлов по списку расширений.
#
# ИСПОЛЬЗОВАНИЕ:
#   delete <расш1> [расш2] [расш3] ...
#   Пример: delete asc txt log
#
# ОСОБЕННОСТИ:
#   1. Поддержка нескольких расширений: Обрабатывает несколько типов файлов за раз.
#   2. Режим скрытых файлов: Опциональный поиск в скрытых папках (напр. .git, .cache).
#   3. Предварительный просмотр: Выводит полный список и количество файлов перед удалением.
#   4. Подтверждение: Требует ввода 'y' или 'yes' для окончательного удаления.
#
# ТЕХНИЧЕСКАЯ ЗАМЕТКА:
#   Использует команду 'find' с флагом '-delete' для эффективности. 
#   Удаление безвозвратное (мимо корзины). Документация добавлена в код, 
#   чтобы через полгода не пришлось мучительно вспоминать, как это работает.
# ==============================================================================

delete() {
    if [ -z "$1" ]; then
        echo "⚠️  Ошибка: Укажи хотя бы одно расширение. Пример: delete jpg png"
        return 1
    fi

    read -p "📁 Искать в скрытых папках и файлах (.*)? (y/N): " hidden
    
    # Собираем аргументы для find в массив для правильной обработки пробелов и звезд
    local find_args=(".")
    
    # Если НЕ ищем в скрытых
    if [[ ! $hidden == [yY] && ! $hidden == [yY][eE][sS] ]]; then
        find_args+=("-not" "-path" "*/.*")
    fi

    find_args+=("-type" "f" "(")

    local first=true
    for ext in "$@"; do
        if [ "$first" = false ]; then
            find_args+=("-o")
        fi
        find_args+=("-name" "*.$ext")
        first=false
    done
    
    find_args+=(")")

    echo "🔍 Ищу файлы по расширениям: $@ ..."
    
    # Ищем файлы, сохраняя результат в переменную
    # Используем массив для вызова, чтобы избежать проблем с кавычками
    found_files=$(find "${find_args[@]}")

    if [ -z "$found_files" ]; then
        echo "Файлов с указанными расширениями не найдено."
        return 0
    fi

    echo "$found_files"
    echo "----------------------------------------"
    count=$(echo "$found_files" | wc -l)
    echo "Всего найдено файлов: $count"

    read -p "🗑️  Удалить эти файлы БЕЗВОЗВРАТНО? (y/N): " confirm
    if [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]]; then
        find "${find_args[@]}" -delete
        echo "✅ Готово. Все указанные файлы удалены."
    else
        echo "❌ Отмена."
    fi
}
```

---
=> /bash/ Назад к разделу "Bash"
=> / Назад на Главную страницу

