🔗 Ссылки:
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Назначение: Основной класс для организации поисковых операций
Ключевые методы:
searchByName()- поиск по шаблону имениsearchByContent()- поиск по содержимомуfindDuplicates()- поиск дубликатов файлов
Особенности реализации:
- Многопоточная обработка через
std::async - Пакетная обработка файлов для эффективного использования памяти
- Поддержка прогресс-бара для длительных операций
Назначение: Вычисление хешей для обнаружения дубликатов
Реализованные алгоритмы:
- MD5 (полная реализация с нуля)
- Size-based хеш для предварительной фильтрации
Особенности:
- Оптимизированная обработка больших файлов
- Обработка ошибок ввода-вывода
Назначение: Визуальное оформление вывода
Функциональность:
- Форматированный вывод дерева файлов
- Отображение групп дубликатов
- Статистика выполнения
- Инициализация: Парсинг аргументов командной строки
- Сканирование: Рекурсивный обход файловой системы
- Фильтрация: Применение критериев поиска
- Обработка: Многопоточное выполнение поисковых задач
- Вывод: Форматированные результаты
// Стратегия разделения работы
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: Группировка файлов по размеру
- Фаза 2: Вычисление MD5-хешей для файлов одинакового размера
- Фаза 3: Группировка по хешу и фильтрация дубликатов
- Грамотная обработка filesystem errors
- Игнорирование файлов без прав доступа
- Валидация regex-шаблонов
- Эффективное использование памяти: Потоковое чтение больших файлов
- Оптимизация ввода-вывода: Буферизация и пакетная обработка
- Масштабируемость: Линейное ускорение с увеличением потоков
MaxGog
📧 Почта: max.gog2005@outlook.com
💖 Поддержать: hipolink.net/maxupshur
SeekFS демонстрирует современные практики C++ разработки, включая использование STL, многопоточность, RAII и модульный дизайн. Проект служит отличным примером для портфолио, показывая навыки в создании эффективных и надежных утилит командной строки.