EN RU

Markdown to Files: LLM Code Projector v3.1 : MD_to_Files.sh

Version
License
Bash
Platform

🚀 Автоматическое преобразование Markdown-документации с примерами кода в реальную файловую структуру проекта

Мощный Bash-инструмент для преобразования ответов LLM (ChatGPT, Claude, DeepSeek, Gemini) с описанием структуры проектов и примерами кода в работающие файловые системы.


📑 Содержание


🎯 О проекте

MD_to_Files.sh (также известный как LLM Code Projector) решает фундаментальную задачу современной разработки: преобразование теоретических архитектурных решений и примеров кода, получаемых от AI-ассистентов, в реальную работающую файловую структуру.

Проблема

Вы получаете от ChatGPT или Claude отличную структуру проекта с примерами кода в Markdown. Что дальше? Создавать каждую папку и файл вручную? Копировать код по одному файлу?

Решение

# Один простой запуск
./MD_to_Files.sh chatgpt_response.md ./my-new-project

# И ваш проект готов!

Для кого?

  • 👨‍💻 Разработчики — быстрое прототипирование из AI-ответов
  • 🔧 DevOps-инженеры — автоматизация создания проектных шаблонов
  • 📝 Технические писатели — создание рабочих примеров из документации
  • 👨‍🏫 Преподаватели — подготовка учебных материалов с кодом
  • 👥 Команды разработки — стандартизация инициализации проектов

✨ Ключевые возможности

🌳 Умный парсинг структуры

  • ✅ Распознавание ASCII и Unicode деревьев каталогов
  • ✅ Создание вложенных каталогов любой глубины
  • ✅ Поддержка различных форматов записи структуры
  • ✅ Автоматическое определение типов узлов (каталог/файл)

💻 Интеллектуальная работа с кодом

  • ✅ Извлечение fenced code blocks из Markdown
  • ✅ Автоматическое связывание кода с соответствующими файлами
  • ✅ Поддержка 30+ языков программирования
  • ✅ Сохранение форматирования, отступов и кодировок

🔒 Безопасность и надежность

  • ✅ Валидация путей и предотвращение path traversal
  • ✅ Автоматическая проверка и конвертация кодировок
  • ✅ Атомарные операции с файлами
  • ✅ Опциональные резервные копии при обновлении

⚙️ Гибкость настройки

  • ✅ Режим dry-run для предварительного просмотра
  • ✅ Интерактивный выбор из нескольких структур
  • ✅ Пакетная обработка всех найденных структур
  • ✅ Подробное логирование с уровнями verbose

🚀 Быстрый старт

Установка (5 секунд)

# Клонируйте репозиторий
git clone https://github.com/paulmann/1st-Launch-Projects-Code-from-LLM-Responses-in-Markdown-into-Actual-File-Structures.git
cd 1st-Launch-Projects-Code-from-LLM-Responses-in-Markdown-into-Actual-File-Structures

# Сделайте исполняемым
chmod +x MD_to_Files.sh

# Проверьте установку
./MD_to_Files.sh --version

Первый запуск (1 минута)

Создайте простой Markdown-файл test.md:

# Test Project

```
test-app/
├── src/
│   └── app.js
└── package.json
```

**src/app.js**
```javascript
console.log('Hello from MD_to_Files!');
```

**package.json**
```json
{
  "name": "test-app",
  "version": "1.0.0"
}
```

Запустите:

./MD_to_Files.sh test.md ./output

Результат:

✓ Created directory: output/test-app/src
✓ Created file: output/test-app/src/app.js (38 bytes)
✓ Created file: output/test-app/package.json (45 bytes)
✓ Success! 2 files created in 1 directory

📦 Установка

Метод 1: Git Clone (рекомендуется)

# Клонирование
git clone https://github.com/paulmann/1st-Launch-Projects-Code-from-LLM-Responses-in-Markdown-into-Actual-File-Structures.git
cd 1st-Launch-Projects-Code-from-LLM-Responses-in-Markdown-into-Actual-File-Structures

# Права на выполнение
chmod +x MD_to_Files.sh

# Создание алиаса (опционально)
echo 'alias md2files="$(pwd)/MD_to_Files.sh"' >> ~/.bashrc
source ~/.bashrc

Метод 2: Прямая загрузка

# Через curl
curl -L -o ~/bin/md2files.sh \
  https://raw.githubusercontent.com/paulmann/1st-Launch-Projects-Code-from-LLM-Responses-in-Markdown-into-Actual-File-Structures/main/MD_to_Files.sh

chmod +x ~/bin/md2files.sh

# Через wget
wget -O ~/bin/md2files.sh \
  https://raw.githubusercontent.com/paulmann/1st-Launch-Projects-Code-from-LLM-Responses-in-Markdown-into-Actual-File-Structures/main/MD_to_Files.sh

chmod +x ~/bin/md2files.sh

Метод 3: Глобальная установка

# Символическая ссылка в PATH
sudo ln -s $(pwd)/MD_to_Files.sh /usr/local/bin/md2files

# Проверка
which md2files
md2files --version

Системные требования

КомпонентТребование
ОСLinux 3.2+, macOS 10.12+, Windows (WSL/Cygwin), BSD
Bash≥ 4.0 (рекомендуется 5.0+)
RAM512 MB (1 GB для крупных проектов)
Диск100 MB свободного места
Утилитыmkdir, touch, cat, grep, sed
Опциональноfile, iconv, git

Проверка зависимостей

# Версия Bash
bash --version

# Проверка утилит
for cmd in mkdir touch cat grep sed file iconv; do
    command -v $cmd &>/dev/null && echo "✓ $cmd" || echo "✗ $cmd"
done

💡 Использование

Базовый синтаксис

./MD_to_Files.sh [ОПЦИИ] <input_file.md> [target_directory]

Простые примеры

# Создание в текущей директории
./MD_to_Files.sh structure.md

# Создание в указанной директории
./MD_to_Files.sh structure.md ./my-project

# Предпросмотр (dry-run)
./MD_to_Files.sh -d structure.md ./preview

# Обновление существующего проекта
./MD_to_Files.sh -U structure.md ./existing-project

# Создание с метаданными проекта
./MD_to_Files.sh -P structure.md ./professional-project

# Интерактивный выбор структуры
./MD_to_Files.sh -i multi_structures.md ./output

# Обработка всех структур в файле
./MD_to_Files.sh -a documentation.md ./batch-output

Режимы работы

РежимОпцияОписание
Создание(по умолчанию)Создает новую файловую структуру
Обновление-U, --updateОбновляет существующие файлы
Проектный-P, --projectСоздает с README и метаданными
Интерактивный-i, --askВыбор из нескольких структур
Пакетный-a, --find-allОбработка всех структур
Dry-run-d, --dry-runСимуляция без изменений

Дополнительные опции

ОпцияДлинная формаОписание
-n N--tree-number NОбработать структуру с номером N
-C--no-codeСоздать пустые файлы без кода
-f--forceПерезаписывать без подтверждения
-b--backupСоздавать резервные копии
-v--verboseПодробный вывод
-l FILE--log FILEЗапись в файл лога
-h--helpПоказать справку
-V--versionПоказать версию

Комбинации опций

# Безопасное обновление с бэкапами и логом
./MD_to_Files.sh -U -b -v -l update.log structure.md ./project

# Пакетная обработка в режиме проекта
./MD_to_Files.sh -a -P documentation.md ./projects

# Принудительное обновление без кода
./MD_to_Files.sh -U -f -C skeleton.md ./scaffold

# Выбор конкретной структуры (3-я по счету)
./MD_to_Files.sh -n 3 variants.md ./variant-3

📝 Форматы входных данных

Структура Markdown-документа

Рекомендуемый формат:

# Название проекта

Краткое описание.

## Структура проекта

```
project-name/
├── directory1/
│   ├── file1.ext
│   └── file2.ext
└── file3.ext
```

## Реализация

**directory1/file1.ext**
```language
// Код для file1
```

**directory1/file2.ext**
```language
// Код для file2
```

Форматы дерева каталогов

Unicode Box-Drawing (рекомендуется):

my-project/
├── src/
│   ├── main.js
│   ├── utils.js
│   └── lib/
│       └── helper.js
├── tests/
│   └── main.test.js
└── package.json

ASCII Tree:

my-project/
|-- src/
|   |-- main.js
|   `-- utils.js
`-- package.json

Simple Indentation:

my-project/
  src/
    main.js
    utils.js
  package.json

Блоки кода

Fenced Code Blocks с языком:

**src/app.js**
```javascript
const express = require('express');
app.listen(3000);
```

**config/database.json**
```json
{
  "host": "localhost",
  "port": 5432
}
```

Поддерживаемые языки

JavaScript, TypeScript, Python, PHP, Java, C, C++, C#, Ruby, Go, Rust, Shell, Bash, HTML, CSS, SCSS, SQL, JSON, YAML, XML, Markdown и др. (30+ языков)

Методы связывания кода с файлами

Метод 1: Жирный маркер (рекомендуется)

**src/controllers/userController.js**
```javascript
exports.getUser = (req, res) => {
    res.json({ user: 'John' });
};
```

Метод 2: Заголовок секции

## src/models/User.js

```javascript
class User {
    constructor(name) { this.name = name; }
}
```

Метод 3: Label с двоеточием

File: config/database.js

```javascript
module.exports = { host: 'localhost' };
```

Приоритет: Жирный маркер > Заголовок > Label > Комментарий в коде


🎬 Примеры

Пример 1: React-приложение

Создайте react_app.md:

# React Application

```
react-app/
├── public/
│   └── index.html
├── src/
│   ├── index.js
│   ├── App.js
│   └── components/
│       ├── Header.js
│       └── Footer.js
└── package.json
```

**src/index.js**
```javascript
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);
```

**src/App.js**
```javascript
import React from 'react';
import Header from './components/Header';
import Footer from './components/Footer';

function App() {
  return (
    <div className="App">
      <Header />
      <main><h1>Welcome to React</h1></main>
      <Footer />
    </div>
  );
}

export default App;
```

**src/components/Header.js**
```javascript
import React from 'react';

function Header() {
  return <header><h2>My React App</h2></header>;
}

export default Header;
```

**src/components/Footer.js**
```javascript
import React from 'react';

function Footer() {
  return <footer><p>&copy; 2025 My App</p></footer>;
}

export default Footer;
```

**package.json**
```json
{
  "name": "react-app",
  "version": "1.0.0",
  "dependencies": {
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build"
  }
}
```

Запустите:

./MD_to_Files.sh -P react_app.md ./my-react-app
cd my-react-app/react-app
npm install
npm start

Пример 2: Express API

Вот ваш текст с заменёнными HTML-энкодированными символами на обычные — все примеры кода и структурные элементы теперь отображаются корректно для копирования и вставки:


Express REST API

textexpress-api/
├── src/
│   ├── app.js
│   ├── routes/
│   │   └── users.js
│   ├── controllers/
│   │   └── userController.js
│   └── config/
│       └── database.js
└── package.json

src/app.js

javascriptconst express = require('express');
const userRoutes = require('./routes/users');

const app = express();
app.use(express.json());
app.use('/api/users', userRoutes);

app.listen(3000, () => {
    console.log('Server on port 3000');
});

src/routes/users.js

javascriptconst express = require('express');
const router = express.Router();
const userController = require('../controllers/userController');

router.get('/', userController.getAll);
router.get('/:id', userController.getById);

module.exports = router;

src/controllers/userController.js

javascriptexports.getAll = (req, res) => {
    res.json({ users: ['John', 'Jane'] });
};

exports.getById = (req, res) => {
    const { id } = req.params;
    res.json({ user: `User ${id}` });
};

package.json

json{
  "name": "express-api",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.18.0"
  }
}

Запустите:

bash./MD_to_Files.sh express_api.md ./my-api
cd my-api/express-api
npm install
node src/app.js

Пример 3: Python учебный курс

Python Course

Lesson 1

textlesson-1/
├── hello.py
└── README.md

hello.py

pythonprint("Hello, World!")

README.md

text# Lesson 1: Hello World
Первая программа на Python.

Lesson 2

textlesson-2/
├── variables.py
└── README.md

variables.py

pythonname = "Student"
age = 20
print(f"Name: {name}, Age: {age}")

README.md

text# Lesson 2: Variables
Работа с переменными в Python.

Запустите:

bash./MD_to_Files.sh -a python_course.md ./course-materials

Пример 4: Обновление существующего проекта

bash# 1. Создайте резервную копию
cp -r ./my-project ./my-project.backup

# 2. Запустите обновление с бэкапами
./MD_to_Files.sh -U -b -v improvements.md ./my-project

# 3. Проверьте изменения
diff -r ./my-project ./my-project.backup

# 4. При необходимости откатите
rm -rf ./my-project
mv ./my-project.backup ./my-project

🔗 Интеграция

Git Hooks

Pre-commit hook для валидации:

bash#!/bin/bash
# .git/hooks/pre-commit

for md_file in $(git diff --cached --name-only | grep '\.md$'); do
    if [[ -f "$md_file" ]]; then
        if ! ./tools/MD_to_Files.sh -d "$md_file" /tmp/test &>/dev/null; then
            echo "❌ Invalid structure in $md_file"
            exit 1
        fi
    fi
done

echo "✅ All Markdown structures are valid"

GitHub Actions

textname: Generate Project Structure

on:
  push:
    paths:
      - 'docs/project-structure.md'

jobs:
  generate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Generate project files
        run: |
          chmod +x ./tools/MD_to_Files.sh
          ./tools/MD_to_Files.sh -P docs/project-structure.md ./generated

      - name: Commit generated files
        run: |
          git config --local user.email "action@github.com"
          git config --local user.name "GitHub Action"
          git add generated/
          git commit -m "Auto-generate project structure" || true
          git push

GitLab CI

textgenerate-structure:
  script:
    - chmod +x ./tools/MD_to_Files.sh
    - ./tools/MD_to_Files.sh -P docs/structure.md ./output
  artifacts:
    paths:
      - output/
  only:
    changes:
      - docs/structure.md

VS Code Task

json{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Generate from Markdown",
      "type": "shell",
      "command": "./tools/MD_to_Files.sh",
      "args": [
        "${file}",
        "${workspaceFolder}/generated"
      ],
      "presentation": {
        "reveal": "always"
      }
    }
  ]
}

Makefile

makefile.PHONY: generate update clean test

MD2FILES := ./tools/MD_to_Files.sh
INPUT := docs/structure.md
OUTPUT := ./generated

generate:
    $(MD2FILES) -P $(INPUT) $(OUTPUT)

update:
    $(MD2FILES) -U -b $(INPUT) $(OUTPUT)

clean:
    rm -rf $(OUTPUT)

test:
    $(MD2FILES) -d $(INPUT) $(OUTPUT)

AI-ассистенты

Оптимальный prompt для ChatGPT/Claude:

textСоздай структуру проекта для [описание проекта].
Используй следующий формат для MD_to_Files.sh:

# Project Name

## Project Structure

project-name/
├── src/
│ └── main.js
└── package.json

Implementation

src/main.js

javascript
// код

package.json

json
{
«name»: «project-name»
}

textУбедись, что:
- Дерево использует Unicode символы (├─└│)
- Каталоги заканчиваются на /
- Файлы помечены жирным шрифтом: **path/to/file.ext**
- Блоки кода в тройных backticks с языком

🔧 Устранение неполадок

Типичные ошибки

Ошибка: «No tree structures found»

Причина: Markdown не содержит распознаваемого дерева.

Решение:

text# ✓ Правильно
├── src/
│   └── file.js

# ✗ Неправильно
- src/
  - file.js

Ошибка: «Permission denied»

Причина: Нет прав на запись.

Решение:

bash# Проверьте права
ls -la target_directory

# Измените права
chmod 755 target_directory

Ошибка: «File encoding not supported»

Причина: Неподдерживаемая кодировка.

Решение:

bash# Определите кодировку
file -i problem_file.md

# Конвертируйте в UTF-8
iconv -f WINDOWS-1252 -t UTF-8 problem_file.md > fixed_file.md

Диагностика

bash# Подробный вывод с логом
./MD_to_Files.sh -v -l debug.log structure.md ./output

# Поиск ошибок в логе
grep -E "(ERROR|WARNING)" debug.log

# Dry-run для проверки
./MD_to_Files.sh -d -v structure.md ./test

FAQ

Q: Почему код не попал в файлы?

A: Проверьте маркеры файлов:

text# ✓ Правильно
**src/app.js**

javascript
код

text# ✗ Неправильно
src/app.js  # Без жирного шрифта

javascript
код

text</details>

<details>
<summary><b>Q: Как обработать несколько структур?</b></summary>

A: Используйте пакетный режим:

bash
./MD_to_Files.sh -a multi_structures.md ./output

</details>

<details>
<summary><b>Q: Можно ли обновить только конкретные файлы?</b></summary>

A: Да, используйте режим обновления:

bash
./MD_to_Files.sh -U specific_files.md ./existing-project

</details>

<details>
<summary><b>Q: Поддерживаются ли бинарные файлы?</b></summary>

A: Нет, только текстовые файлы. Бинарные файлы нужно добавлять вручную.
</details>

<details>
<summary><b>Q: Как работает с Windows?</b></summary>

A: Используйте WSL (Windows Subsystem for Linux) или Cygwin.

powershell

В WSL

wsl bash MD_to_Files.sh structure.md ./output

</details>

---

## 📚 Документация

### Полная документация

- 📖 [Подробное руководство пользователя](docs/USER_GUIDE.md)
- 🏗️ [Архитектура и логика работы](docs/ARCHITECTURE.md)
- 🔌 [Интеграция и автоматизация](docs/INTEGRATION.md)
- 💡 [Лучшие практики](docs/BEST_PRACTICES.md)
- 🐛 [Troubleshooting](docs/TROUBLESHOOTING.md)

### Дополнительные ресурсы

- [CHANGELOG](CHANGELOG.md) — История изменений
- [CODE_OF_CONDUCT](CODE_OF_CONDUCT.md) — Кодекс поведения
- [CONTRIBUTING](CONTRIBUTING.md) — Руководство для контрибьюторов
- [LICENSE](LICENSE) — Лицензия MIT

### Шаблоны

- [Express API Template](templates/express-api.md)
- [React App Template](templates/react-app.md)
- [Python Project Template](templates/python-project.md)
- [Node.js CLI Template](templates/nodejs-cli.md)

---

## 🤝 Contributing

Мы приветствуем вклад в развитие проекта! Вот как вы можете помочь:

### Способы участия

1. 🐛 **Сообщайте о багах** — откройте [issue](https://github.com/paulmann/1st-Launch-Projects-Code-from-LLM-Responses-in-Markdown-into-Actual-File-Structures/issues)
2. 💡 **Предлагайте улучшения** — создайте feature request
3. 📝 **Улучшайте документацию** — исправьте опечатки, добавьте примеры
4. 💻 **Отправляйте Pull Requests** — исправления багов и новые функции

### Процесс контрибьюции

bash

1. Fork репозитория

2. Клонируйте ваш fork

git clone https://github.com/YOUR_USERNAME/1st-Launch-Projects-Code-from-LLM-Responses-in-Markdown-into-Actual-File-Structures.git

3. Создайте ветку для изменений

git checkout -b feature/amazing-feature

4. Внесите изменения и закоммитьте

git commit -m «Add amazing feature»

5. Запушьте в ваш fork

git push origin feature/amazing-feature

6. Откройте Pull Request

### Стандарты кода

- Используйте Shell Check для проверки скриптов
- Добавляйте комментарии к сложной логике
- Следуйте существующему стилю кодирования
- Обновляйте документацию при добавлении функций
- Добавляйте тесты для новой функциональности

### Тестирование

bash

Запустите тесты

./tests/run_tests.sh

Проверьте Shell Check

shellcheck MD_to_Files.sh
«`


📞 Контакты

Автор

Mikhail Deynekin

Проект


🌟 Поддержите проект

Если MD_to_Files.sh помог вам в работе:

  • ⭐ Поставьте звезду на GitHub
  • 🐦 Расскажите о проекте в социальных сетях
  • 📝 Напишите статью или туториал

🙏 Благодарности

Спасибо всем, кто внес вклад в развитие проекта:

  • @paulmann — оригинальный автор
  • Всем контрибьюторам — спасибо за Pull Requests
  • Сообществу — за отзывы и предложения

Связанные проекты


Добавить комментарий

Разработка и продвижение сайтов webseed.ru
Прокрутить вверх