# PhotOrg - Организатор фотографий и медиафайлов PhotOrg - это утилита командной строки на Go для автоматической организации фотографий и видеофайлов по датам съемки. ## Возможности - Рекурсивное сканирование исходной директории - Извлечение даты съемки из EXIF и других метаданных - Организация файлов в структуру `YYYY/YYYY-MM-DD` - Обработка дубликатов по хеш-сумме SHA256 - Автоматическое переименование при конфликтах имен - Перемещение файлов без метаданных в папку "Unsorted" - Режим dry-run для предварительного просмотра изменений - Удаление дубликатов в корзину (Linux) ## Поддерживаемые форматы ### Изображения - JPEG (.jpg, .jpeg) - PNG (.png) - GIF (.gif) - BMP (.bmp) - TIFF (.tiff, .tif) - RAW форматы (.cr2, .nef, .arw, .dng, .raf, .orf, .rw2) ### Видео - MP4 (.mp4) - AVI (.avi) - MOV (.mov) - MKV (.mkv) - WMV (.wmv) - FLV (.flv) - WebM (.webm) ## Установка ### Предварительные требования Для работы с расширенными метаданными требуется установка ExifTool: ```bash # Ubuntu/Debian sudo apt-get install exiftool # CentOS/RHEL/Fedora sudo yum install perl-Image-ExifTool # или для новых версий Fedora sudo dnf install perl-Image-ExifTool # Arch Linux sudo pacman -S perl-image-exiftool ``` ### Сборка программы ```bash git clone cd photorg go mod tidy go build -o photorg ``` ## Использование ### Основной синтаксис ```bash ./photorg <исходная_директория> <целевая_директория> [опции] ``` ### Параметры - `исходная_директория` - исходная директория для сканирования (обязательный позиционный аргумент) - `целевая_директория` - целевая директория для организации файлов (обязательный позиционный аргумент) - `-dry-run` - режим предварительного просмотра без фактического перемещения файлов ### Примеры использования #### Предварительный просмотр ```bash ./photorg /home/user/Pictures /home/user/Organized -dry-run ``` #### Организация фотографий ```bash ./photorg /home/user/Pictures /home/user/Organized ``` ## Структура результата Программа создает следующую структуру директорий: ``` dest_directory/ ├── 2023/ │ ├── 2023-01-15/ │ │ ├── IMG_001.jpg │ │ └── IMG_002.jpg │ └── 2023-12-25/ │ └── video.mp4 ├── 2024/ │ └── 2024-03-10/ │ ├── photo.jpg │ └── photo_1.jpg # конфликт имен └── Unsorted/ └── file_without_date.png ``` ## Обработка конфликтов ### Идентичные файлы Если файл с таким же именем уже существует в целевой директории и имеет идентичную хеш-сумму SHA256, исходный файл удаляется в корзину. ### Разные файлы с одинаковыми именами Если файлы имеют разные хеш-суммы, к имени добавляется суффикс `_1`, `_2` и т.д. ## Безопасность - Программа проверяет, что целевая директория не является поддиректорией исходной - Дубликаты удаляются в корзину, а не окончательно - Режим dry-run позволяет предварительно оценить изменения - Все операции логируются ## Ограничения - Поддерживается только Linux (корзина) - Требуется установка ExifTool для расширенной поддержки метаданных - Программа не обрабатывает символические ссылки ## Примеры вывода ### Режим dry-run ``` [DRY RUN] Would move: /source/IMG_001.jpg -> /dest/2023/2023-01-15/IMG_001.jpg [DRY RUN] Would move: /source/video.mp4 -> /dest/2023/2023-12-25/video.mp4 [DRY RUN] Would move: /source/no_date.png -> /dest/Unsorted/no_date.png ``` ### Обычный режим ``` Moved: /source/IMG_001.jpg -> /dest/2023/2023-01-15/IMG_001.jpg Moved: /source/video.mp4 -> /dest/2023/2023-12-25/video.mp4 Moved: /source/no_date.png -> /dest/Unsorted/no_date.png ``` ## Лицензия MIT License