<===
2025-11-02 21:12:19
**автоматически найдёт все `.txt` файлы** в текущей директории и всех поддиректориях, **объединит их в один файл** и **добавит заголовок с источником** .
все txt файлы в один
---
### Универсальный скрипт (Bash) — ищет все `.txt` файлы рекурсивно
```bash
#!/bin/bash
# Имя выходного файла
OUTPUT="all_txt_combined.txt"
# Очищаем/создаём файл
> "$OUTPUT"
echo "Ищем все .txt файлы в текущей директории и поддиректориях..."
echo "Результат будет сохранён в: $OUTPUT"
echo "===================================================="
# Счётчик
count=0
# Рекурсивно ищем все .txt файлы
find . -type f -name "*.txt" -print0 | sort -z | while IFS= read -r -d '' file; do
# Пропускаем сам выходной файл
[[ "$file" == "./$OUTPUT" ]] && continue
# Проверяем, не пустой ли файл
if [[ -s "$file" ]]; then
((count++))
# Относительный путь от текущей директории
rel_path="${file#./}"
echo "" >> "$OUTPUT"
echo "===== ИСТОЧНИК: $rel_path =====" >> "$OUTPUT"
echo "Файл: $rel_path" >> "$OUTPUT"
echo "Размер: $(wc -l < "$file") строк" >> "$OUTPUT"
echo "Изменён: $(date -r "$file" '+%Y-%m-%d %H:%M:%S')" >> "$OUTPUT"
echo "========================================" >> "$OUTPUT"
echo "" >> "$OUTPUT"
# Копируем содержимое
cat "$file" >> "$OUTPUT"
# Две пустые строки между файлами
echo -e "\n\n" >> "$OUTPUT"
echo "Обработан [$count]: $rel_path"
else
echo "Пропущен (пустой): $rel_path"
fi
done
echo ""
echo "ГОТОВО! Обработано файлов: $count"
echo "Результат: $OUTPUT"
echo "Общий размер: $(wc -l < "$OUTPUT") строк"
```
---
### Как использовать:
1. Сохрани скрипт как `combine_txt.sh`
2. Сделай исполняемым:
```bash
chmod +x combine_txt.sh
```
3. Запусти **в папке с файлами**:
```bash
./combine_txt.sh
```
---
### Пример заголовка в результате:
```
===== ИСТОЧНИК: networks.txt/proxmox.txt =====
Файл: networks.txt/proxmox.txt
Размер: 42 строк
Изменён: 2025-11-02 14:30:22
========================================
[содержимое файла...]
===== ИСТОЧНИК: museum/router.txt =====
...
```
---
### Дополнительно: Python-версия (если любишь Python)
```python
#!/usr/bin/env python3
import os
from pathlib import Path
from datetime import datetime
output_file = "all_txt_combined.txt"
root_dir = Path(".")
with open(output_file, 'w', encoding='utf-8') as out:
txt_files = sorted(root_dir.rglob("*.txt"))
count = 0
for file in txt_files:
if file.name == output_file:
continue
if file.stat().st_size == 0:
print(f"Пропущен (пустой): {file}")
continue
count += 1
rel_path = file.relative_to(root_dir)
out.write(f"\n===== ИСТОЧНИК: {rel_path} =====\n")
out.write(f"Файл: {rel_path}\n")
line_count = len(file.read_text(encoding='utf-8').splitlines())
out.write(f"Размер: {line_count} строк\n")
mtime = datetime.fromtimestamp(file.stat().st_mtime)
out.write(f"Изменён: {mtime.strftime('%Y-%m-%d %H:%M:%S')}\n")
out.write(f"{'='*43}\n\n")
out.write(file.read_text(encoding='utf-8'))
out.write("\n\n\n")
print(f"[{count}] {rel_path}")
print(f"\nГОТОВО! Обработано: {count} файлов → {output_file}")
```
---
**Плюсы этого решения:**
- Работает с любой структурой папок
- Автоматически сортирует файлы
- Пропускает пустые и сам выходной файл
- Пишет человекочитаемые заголовки
- Работает в Linux/macOS/Windows (через WSL или Git Bash)
---