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
Languages
Go
100%