Интерактивный инструмент для удаления файлов по расширениям
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/