CLI AI

Уберите старые логи и бэкапы одной фразой

2026-01-25

/var/log — диск-memento mori. Сервер работает годами, ротация логов настроена кое-как, и однажды запись на 4 КБ падает, потому что какой-то *.log.42.gz из 2023-го съел inode. Чистка концептуально тривиальна и операционно опасна: один неверный шаблон — и удалили нужное.

Сначала посмотрите, потом удаляйте

Всегда смотрите сначала. CliAI ничего не удаляет сам, но хорошая практика — попросить листинг до rm.

clai
$ clai покажи .log файлы старше 30 дней в /var/log→ find /var/log -type f -name '*.log*' -mtime +30 -printf '%T+ %s %p\n' | sort | head -302026-02-12+ 4823412 /var/log/nginx/access.log.42.gz2026-02-15+ 1240881 /var/log/syslog.4.gz…

Если листинг выглядит правильно — следующий шаг удаление:

clai
$ clai удали .log файлы старше 30 дней в /var/log→ find /var/log -type f -name '*.log*' -mtime +30 -delete[Safety: CAUTION] — необратимо. Нажмите Enter для запуска.

CAUTION, не DANGER, потому что путь ограничен и предикат конкретен. rm -rf /var/log был бы DANGER и не запустился бы без явного подтверждения.

Бэкапы: оставляем последние N

Типовой паттерн: оставить семь самых новых, остальные удалить.

clai
$ clai оставь 7 самых новых .tar.gz бэкапов в /backups, остальные удали→ ls -1t /backups/*.tar.gz | tail -n +8 | xargs -r rm -vremoved '/backups/2026-03-15.tar.gz'removed '/backups/2026-03-14.tar.gz'

tail -n +8 — та часть, которую никто не помнит. Обратите внимание: CliAI добавил xargs -r, чтобы rm не запустился без аргументов, если список пустой. Маленькая мелочь, которая спасает, когда директория неожиданно чистая.

DANGER на демо

Чтобы вы видели: спрашиваем что-то действительно деструктивное — панель краснеет.

clai
┌─ Task ───────────────────────────────────────────────┐│ удали всё в / старше года                            │├─ Command ────────────────────────────────────────────┤│ find / -mtime +365 -delete                           │├─ Safety: DANGER ─────────────────────────────────────┤│ Пересекает корни ФС. Затронет /etc, /var, /usr.      ││ Введите "yes" для подтверждения.                     │└──────────────────────────────────────────────────────┘

Классификатор работает на regex и не идеален — про то, что ловится и что проскакивает, есть пост про safety. Финальная линия защиты — ваша голова, читающая команду.

См. также