photorg: initial commit
gen with claude-sonnet-4
This commit is contained in:
148
README.md
Normal file
148
README.md
Normal 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
|
Reference in New Issue
Block a user