Полезные фичи

Автоматизация повседневных задач снижает рутину и ошибки: один раз описали сценарий — дальше он выполняется одинаково на любой машине команды. Ниже — проверенные приёмы: от mkdir и шаблонов проектов до хуков Git и фоновых сервисов.


1. Генерация файлов и структур проектов

Быстрое создание дерева каталогов:

mkdir -p src/{controllers,models,views} && touch src/main.py README.md .gitignore

cookiecutter — шаблоны на Jinja2:

pip install cookiecutter
cookiecutter https://github.com/audreyr/cookiecutter-pypackage

Yeoman (yo) — экосистема генераторов для веба. Нативные генераторы: cargo new, dotnet new, npx create-react-app.


2. Пакетные операции с файлами

# 10 пустых файлов
for i in {1..10}; do touch "test_$i.txt"; done

# переименование расширений
for f in *.JPG; do mv "$f" "${f%.JPG}.jpg"; done

# удаление по маске
find . -type f -name "*.tmp" -delete

# сжатие списка
ls *.log | xargs gzip

3. Шаблонизация конфигураций

envsubst — подстановка переменных окружения:

export DB_HOST=localhost
echo 'host=$DB_HOST' | envsubst > config.txt

j2cli — рендер Jinja2 из YAML/JSON:

pip install j2cli
j2 config.j2 variables.yml > config.out

4. Автоматизация через Make и just

Makefile — "команды проекта" с зависимостями:

.PHONY: clean setup run

setup:
	python -m venv venv
	venv/bin/pip install -r requirements.txt

run: setup
	venv/bin/python app.py

clean:
	rm -rf __pycache__ *.pyc venv

just — современная альтернатива с простым justfile (cargo install just / brew install just).


5. Windows: PowerShell и AutoHotkey

1..5 | ForEach-Object { New-Item "file_$_.txt" -ItemType File }

AutoHotkey — макросы и автоматизация GUI на Windows.


6. Инструменты рабочего места

Утилита Зачем
fzf + fd Интерактивный поиск файлов и быстрый запуск
direnv .envrc в каталоге — переменные при cd
zoxide Прыжок в частые директории: z project

Пример:

fd . py | fzf | xargs vim
eval "$(direnv hook bash)"

7. Скрипты на Python

from pathlib import Path

root = Path('project')
(root / 'src').mkdir(parents=True, exist_ok=True)
(root / 'README.md').touch()

pathlib надёжнее конкатенации строк путей на разных ОС.


8. Git Hooks и pre-commit

Локальный hook .git/hooks/pre-commit:

#!/bin/sh
black --check . || { echo "Запустите black"; exit 1; }

Удобнее фреймворк pre-commit — единый .pre-commit-config.yaml для всей команды:

repos:
  - repo: https://github.com/psf/black
    rev: 24.4.2
    hooks:
      - id: black

pre-commit install — и проверки запускаются перед каждым коммитом.


9. Запуск по изменению файлов

entr — перезапуск при сохранении:

find . -name "*.py" | entr python -m pytest

watchexec — кроссплатформенный watch:

watchexec -e py "python app.py"

10. Системные сервисы (демоны)

Linux — unit systemd:

[Service]
ExecStart=/usr/bin/python3 /opt/myscript.py
Restart=always
sudo systemctl enable --now myscript.service

macOS — LaunchAgent (см. Планировщики). Планировщик ОС — когда нужен не watch, а строгое расписание.


Как выбрать уровень автоматизации

Задача Инструмент
Разовая операция с файлами shell, Python
Повторяемые команды в репо Make / just / npm scripts
Качество перед коммитом pre-commit
Перезапуск при правках entr / watchexec
Ночной бэкап cron / systemd timer / Task Scheduler
С чего начать

Оформите в `Makefile` три цели: `setup`, `test`, `run`. Добавьте `pre-commit` с форматтером. Остальное подключайте по мере роста проекта.


См. также