149 lines
5.1 KiB
Markdown
149 lines
5.1 KiB
Markdown
# 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 <исходная_директория> <целевая_директория> [опции]
|
||
```
|
||
|
||
### Параметры
|
||
|
||
- `исходная_директория` - исходная директория для сканирования (обязательный позиционный аргумент)
|
||
- `целевая_директория` - целевая директория для организации файлов (обязательный позиционный аргумент)
|
||
- `-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
|