2025-07-23 17:54:12 +03:00
2025-07-23 17:54:12 +03:00
2025-07-23 17:54:12 +03:00
2025-07-23 17:54:12 +03:00

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:

# 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

Сборка программы

git clone <repository-url>
cd photorg
go mod tidy
go build -o photorg

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

Основной синтаксис

./photorg <исходная_директория> <целевая_директория> [опции]

Параметры

  • исходная_директория - исходная директория для сканирования (обязательный позиционный аргумент)
  • целевая_директория - целевая директория для организации файлов (обязательный позиционный аргумент)
  • -dry-run - режим предварительного просмотра без фактического перемещения файлов

Примеры использования

Предварительный просмотр

./photorg /home/user/Pictures /home/user/Organized -dry-run

Организация фотографий

./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

Description
No description provided
Readme 57 KiB
Languages
Go 100%