Перейти к основному содержимому

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

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


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

a. touch / mkdir -p (Unix/Linux/macOS)

  • Назначение: быстрое создание файлов и вложенных директорий.
  • Пример:
    mkdir -p src/{controllers,models,views} && touch src/main.py README.md .gitignore

b. printf + шаблоны

  • Пример (создание .gitignore):
    printf "node_modules/\n.env\n*.log\n" > .gitignore

c. cookiecutter (Python, кроссплатформенный)

  • Описание: генератор проектов на основе шаблонов (Jinja2).
  • Установка:
    pip install cookiecutter
  • Использование:
    cookiecutter https://github.com/audreyr/cookiecutter-pypackage.git
  • Репозитории шаблонов: https://github.com/cookiecutter/cookiecutter

d. yeoman (Node.js)

  • Описание: инструмент генерации проектов (веб, мобильные приложения и др.).
  • Установка:
    npm install -g yo
  • Пример:
    npm install -g generator-webapp
    yo webapp
  • Сайт: https://yeoman.io

e. cargo new / dotnet new / create-react-app

  • Стандартные генераторы в экосистемах:
    • Rust: cargo new my_project
    • .NET: dotnet new console -o MyApp
    • React: npx create-react-app my-app

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

a. Циклы в Bash/Zsh

  • Пример (создать 10 файлов):
    for i in {1..10}; do touch "test_$i.txt"; done
  • Переименование по шаблону:
    for f in *.JPG; do mv "$f" "${f%.JPG}.jpg"; done

b. find + -exec

  • Пример (удалить все .tmp):
    find . -type f -name "*.tmp" -delete

c. xargs

  • Пример (обработать список файлов):
    ls *.log | xargs gzip

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

a. envsubst (входит в gettext)

  • Описание: подстановка переменных окружения в текстовые файлы.
  • Пример:
    export DB_HOST=localhost
    echo 'host=$DB_HOST' | envsubst > config.txt

b. j2cli — CLI для Jinja2

  • Установка:
    pip install j2cli
  • Пример:
    j2 config.j2 variables.yml > config.out

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

a. Makefile для повседневных задач

  • Пример:
    .PHONY: clean setup run

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

    run:
    venv/bin/python app.py

    clean:
    rm -rf __pycache__ *.pyc venv
  • Запуск: make setup, make run

b. just — современная замена Make (Rust-based)

  • Установка:
    cargo install just
    # или
    brew install just
  • Файл justfile:
    setup:
    python -m venv venv
    ./venv/bin/pip install -r requirements.txt

    run: setup
    ./venv/bin/python app.py

5. Автоматизация в Windows (PowerShell / Batch)

a. Создание файлов через PowerShell

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

b. Автоматизация через .bat

@echo off
mkdir project\src
type nul > project\src\main.py
echo print("Hello") > project\src\main.py

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


6. Инструменты для автоматизации рабочего места

a. fzf + fd — интерактивный поиск и выполнение

  • Пример (быстрый запуск файла):
    fd . py | fzf | xargs vim

b. direnv — автоматическая загрузка переменных окружения

  • Установка:
    sudo apt install direnv
    echo 'eval "$(direnv hook bash)"' >> ~/.bashrc
  • Использование: создаёте .envrc в проекте — переменные загружаются при входе в папку.

c. z / zoxide — умный переход по директориям

  • Установка:
    cargo install zoxide
    eval "$(zoxide init bash)"
  • Использование: z project → переходит в недавно использованную папку с именем project.

7. Автоматизация через скрипты на Python

a. Генерация файлов из шаблонов

import os

dirs = ['src', 'tests', 'docs']
files = ['README.md', 'requirements.txt', 'src/__init__.py']

for d in dirs:
os.makedirs(d, exist_ok=True)

for f in files:
if not os.path.exists(f):
with open(f, 'w') as fp:
fp.write('')

b. pathlib для надёжной работы с путями

from pathlib import Path

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

8. Автоматизация через Git Hooks

a. Пример pre-commit (проверка форматирования)

Создайте .git/hooks/pre-commit:

#!/bin/sh
black --check .
if [ $? -ne 0 ]; then
echo "Запустите black перед коммитом"
exit 1
fi

Не забудьте сделать исполняемым: chmod +x .git/hooks/pre-commit

b. pre-commit фреймворк

  • Установка:
    pip install pre-commit
  • Конфиг .pre-commit-config.yaml:
    repos:
    - repo: https://github.com/psf/black
    rev: 24.4.2
    hooks:
    - id: black
  • Активация: pre-commit install

9. Запуск задач по событиям

a. entr — выполнение команды при изменении файлов

  • Установка:
    sudo apt install entr
  • Пример (перезапуск тестов):
    find . -name "*.py" | entr python -m pytest

b. watchexec (кроссплатформенный аналог)

  • Установка:
    cargo install watchexec-cli
  • Пример:
    watchexec -e py "python app.py"

10. Автоматизация через системные сервисы

a. Скрипт как systemd-сервис (Linux)

Создайте /etc/systemd/system/myscript.service:

[Unit]
Description=My Automation Script

[Service]
ExecStart=/usr/bin/python3 /opt/myscript.py
Restart=always
User=timur

[Install]
WantedBy=multi-user.target

Активируйте:

sudo systemctl enable --now myscript.service

b. LaunchAgent (macOS)

См. главу «Планировщики» — аналогично, но для пользовательских задач.