photorg: initial commit

gen with claude-sonnet-4
This commit is contained in:
2025-07-23 12:03:06 +03:00
commit db9238c661
4 changed files with 577 additions and 0 deletions

148
README.md Normal file
View File

@@ -0,0 +1,148 @@
# 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 <repository-url>
cd photorg
go mod tidy
go build -o photorg
```
## Использование
### Основной синтаксис
```bash
./photorg -source <исходная_директория> -dest <целевая_директория> [опции]
```
### Параметры
- `-source` - исходная директория для сканирования (обязательный)
- `-dest` - целевая директория для организации файлов (обязательный)
- `-dry-run` - режим предварительного просмотра без фактического перемещения файлов
### Примеры использования
#### Предварительный просмотр
```bash
./photorg -source /home/user/Pictures -dest /home/user/Organized -dry-run
```
#### Организация фотографий
```bash
./photorg -source /home/user/Pictures -dest /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