Skip to content

MaxGog/seekfs

Repository files navigation

SeekFS - утилита для продвинутого поиска файлов

🔗 Ссылки:

Оглавление

  1. Обзор
  2. Возможности
  3. Установка и сборка
  4. Использование
  5. Примеры
  6. Архитектура
  7. Технические детали

Обзор

SeekFS - это современная утилита для поиска файлов, написанная на C++17/20. Проект демонстрирует продвинутые навыки программирования, включая многопоточность, работу с файловой системой, хеширование и создание CLI-интерфейсов.

Основные характеристики:

  • 🚀 Высокопроизводительный многопоточный поиск
  • 📁 Поддержка поиска по имени и содержимому
  • 🔍 Поиск дубликатов файлов по MD5-хешу
  • 🎯 Гибкая фильтрация по типам файлов и размеру
  • 📊 Визуализация прогресса выполнения
  • 🛠 Модульная и расширяемая архитектура

Возможности

Поисковые функции

  • Поиск по имени: Регулярные выражения для имен файлов
  • Поиск по содержимому: Поиск текста внутри файлов с поддержкой regex
  • Поиск дубликатов: Обнаружение одинаковых файлов через MD5-хеширование
  • Фильтрация: По типу файлов, размеру, с учетом регистра

Производительность

  • Многопоточность: Параллельная обработка файлов
  • Оптимизированный алгоритм: Двухэтапная проверка дубликатов (сначала по размеру, затем по хешу)
  • Прогресс-бар: Визуализация выполнения длительных операций

Пользовательский интерфейс

  • Интуитивный CLI: Подробная справка и примеры
  • Визуальное оформление: Цветные заголовки и структурированный вывод
  • Обработка ошибок: Грамотная обработка исключительных ситуаций

Установка и сборка

Требования

  • Компилятор с поддержкой C++17 (GCC 9+, Clang 10+, MSVC 2019+)
  • CMake 3.12+
  • Библиотека cxxopts для парсинга аргументов командной строки

Сборка

# Клонирование репозитория
git clone <https://github.com/maxgog/SeekFS/>
cd SeekFS

# Создание директории сборки
mkdir build && cd build

# Конфигурация и сборка
cmake ..
make

# Запуск
./SeekFS --help

Зависимости

  • cxxopts: Легковесная библиотека для парсинга аргументов командной строки
  • STL: Используются современные компоненты C++17 (std::filesystem, std::regex и др.)

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

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

SeekFS [ОПЦИИ]... 

Основные опции

Опция Аргумент Описание
-p, --path ПУТЬ Путь для поиска (по умолчанию: текущая директория)
-n, --name РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ Поиск файлов по имени
-c, --content РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ Поиск по содержимому файлов
-d, --duplicates - Поиск дубликатов файлов
-i, --ignore-case - Регистронезависимый поиск
--progress - Показывать индикатор прогресса
-t, --threads ЧИСЛО Количество потоков (по умолчанию: 4)
--max-size МБ Максимальный размер файла в МБ (по умолчанию: 100)
--type РАСШИРЕНИЯ Фильтр по типам файлов (через запятую)
-h, --help - Показать справку

Примеры

Поиск по имени

# Поиск всех текстовых файлов
SeekFS -n ".*\.txt$" --progress

# Поиск файлов с "test" в имени (без учета регистра)
SeekFS -n "test" -i --path /home/user/documents

Поиск по содержимому

# Поиск файлов, содержащих "TODO"
SeekFS -c "TODO" --progress

# Поиск email-адресов в файлах
SeekFS -c "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" -i

Поиск дубликатов

# Поиск дубликатов с 8 потоками
SeekFS -d -t 8 --progress

# Поиск дубликатов изображений
SeekFS -d --type jpg,jpeg,png --max-size 50

Комбинированный поиск

# Поиск Python файлов, содержащих классы
SeekFS --type py -c "class [A-Z]" --path /project/src

Архитектура

Основные компоненты

1. FileSearcher

Назначение: Основной класс для организации поисковых операций

Ключевые методы:

  • searchByName() - поиск по шаблону имени
  • searchByContent() - поиск по содержимому
  • findDuplicates() - поиск дубликатов файлов

Особенности реализации:

  • Многопоточная обработка через std::async
  • Пакетная обработка файлов для эффективного использования памяти
  • Поддержка прогресс-бара для длительных операций

2. HashCalculator

Назначение: Вычисление хешей для обнаружения дубликатов

Реализованные алгоритмы:

  • MD5 (полная реализация с нуля)
  • Size-based хеш для предварительной фильтрации

Особенности:

  • Оптимизированная обработка больших файлов
  • Обработка ошибок ввода-вывода

3. GraphicsUtils

Назначение: Визуальное оформление вывода

Функциональность:

  • Форматированный вывод дерева файлов
  • Отображение групп дубликатов
  • Статистика выполнения

Поток данных

  1. Инициализация: Парсинг аргументов командной строки
  2. Сканирование: Рекурсивный обход файловой системы
  3. Фильтрация: Применение критериев поиска
  4. Обработка: Многопоточное выполнение поисковых задач
  5. Вывод: Форматированные результаты

Технические детали

Многопоточность

// Стратегия разделения работы
size_t batch_size = std::max(size_t(1), files.size() / num_threads_);
std::vector<std::future<std::vector<std::string>>> futures;

// Асинхронное выполнение
for (const auto& batch : batches) {
    futures.push_back(std::async(std::launch::async, [&]() {
        return processBatch(batch, predicate);
    }));
}

Алгоритм поиска дубликатов

  1. Фаза 1: Группировка файлов по размеру
  2. Фаза 2: Вычисление MD5-хешей для файлов одинакового размера
  3. Фаза 3: Группировка по хешу и фильтрация дубликатов

Обработка ошибок

  • Грамотная обработка filesystem errors
  • Игнорирование файлов без прав доступа
  • Валидация regex-шаблонов

Производительность

  • Эффективное использование памяти: Потоковое чтение больших файлов
  • Оптимизация ввода-вывода: Буферизация и пакетная обработка
  • Масштабируемость: Линейное ускорение с увеличением потоков

👨‍💻 Автор

MaxGog

📧 Почта: max.gog2005@outlook.com
💖 Поддержать: hipolink.net/maxupshur


SeekFS демонстрирует современные практики C++ разработки, включая использование STL, многопоточность, RAII и модульный дизайн. Проект служит отличным примером для портфолио, показывая навыки в создании эффективных и надежных утилит командной строки.

About

A utility for quickly searching and analyzing files in the file system. Optimized for large amounts of data.

Topics

Resources

License

Stars

Watchers

Forks

Contributors