Files
photorg/README.md

149 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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