«Программное обеспечение предоставляется "как есть" (AS IS), без каких-либо гарантий».
Лёгкая Windows-программа с тёмной темой, которая рекурсивно собирает все файлы из выбранной папки в один текстовый файл. Написана на Python и tkinter — никаких внешних зависимостей. Поддерживает возможность выбора исключений, как локальных для выбранной папки, так и глобальных которые действуют в любом выбранном проекте.
- Рекурсивный обход — проходится по всем вложенным папкам, собирает файлы, сортирует по алфавиту и пишет в один выходной файл
- Имя дампа от папки — выходной файл автоматически называется по имени выбранной папки (например,
fox_2026-08-06_....txt), имя пересчитывается при смене папки - Копирование в буфер обмена — галочка «Копировать в буфер обмена»: после объединения финальный текст автоматически копируется в буфер обмена
- Исключения — можно исключить файлы или папки по имени, с указанием области (везде, только корень, или в конкретной подпапке); общие исключения действуют для всех папок
- Тёмная тема — современный тёмный интерфейс
- Один экземпляр — запускается только одна копия программы, повторный запуск игнорируется
- Логирование сессий — хранит историю последних 10 запусков в папке
logs/ - История папок — запоминает до 20 недавно использованных папок
- Windows 7+
- Python 3.11+ (tkinter входит в комплект, ничего дополнительно ставить не надо)
- Перейдите на страницу релизов и скачайте последнюю версию, например v1.2.zip
- Распакуйте архив в удобное место
- Запустите
run.bat— откроется окно программы
python main.pyИли просто дважды кликнуть run.bat — откроется без консоли.
- Выберите исходную папку (или выберите из истории)
- Укажите путь к выходному файлу (по умолчанию подставляется имя папки с датой)
- При желании настройте исключения через кнопку «Настроить исключения» и включите галочку «Копировать в буфер обмена», если нужно автоматическое копирование результата
- Нажмите «Объединить»
В результате получите файл, где содержимое каждого файла из исходной папки идёт по порядку, а перед каждым файлом указан его относительный путь.
================================================================================
Файл: relative/path/file.txt
================================================================================
[содержимое файла]
===============================================================================
Файл: relative/path/next_file.txt
===============================================================================
[содержимое файла]
При первом запуске настройки создаются автоматически. Можете скопировать config/settings.example.json как образец.
| Параметр | Описание |
|---|---|
last_folder |
Последняя использованная исходная папка |
folder_history |
История папок (макс. 20) |
copy_to_clipboard |
Копировать ли финальный текст в буфер обмена после объединения (true/false) |
Исключения хранятся отдельно:
config/global_exceptions.json— общие исключения для всех папок (по умолчанию:logs,dumps,__pycache__,.git,node_modules,*.tmp,*.log,Thumbs.db,.DS_Store,.gitignore,*.md)config/local_exceptions.json— исключения для конкретных папок (в гитигноре, содержит локальные пути)
folder-merger/
├── main.py # Точка входа
├── requirements.txt # Зависимости (нет)
├── run.bat # Запуск без консоли
├── LICENSE
├── README.md
├── .gitignore
├── config/
│ ├── settings.example.json # Пример настроек
│ ├── global_exceptions.json # Общие исключения (по умолчанию)
│ ├── settings.json # Твои настройки (в гитигноре)
│ └── local_exceptions.json # Локальные исключения (в гитигноре)
├── app/
│ ├── __init__.py
│ ├── main_window.py # Графический интерфейс
│ ├── merger.py # Логика объединения
│ ├── merge_worker.py # Фоновый поток и статусы
│ ├── settings_manager.py # Сохранение/загрузка настроек
│ ├── exceptions_engine.py # Фильтрация файлов и папок
│ ├── exceptions_window.py # Окно настроек исключений
│ ├── global_exceptions_window.py # Окно общих исключений
│ ├── exception_store.py # Хранение исключений
│ ├── instance_manager.py # Контроль единственного экземпляра
│ ├── logger.py # Логирование сессий
│ └── theme.py # Цвета тёмной темы
└── logs/ # Логи сессий (в гитигноре)