copier: rsync, случайный порядок, папка назначения, права 777
- rsync --partial --append-verify для возобновления передачи - --no-perms --chmod=ugo=rwx — права 777 на диске - Структура: <mount>/<dest_folder>/<rel path from /media>, default media - Shuffle файлов перед копированием - Диск заполняется пока есть место, файлы которые не влезают пропускаются - Прогресс по количеству обработанных файлов - rsync добавлен в Dockerfile Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math/rand/v2"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@@ -134,6 +135,9 @@ func (c *Copier) run(ctx context.Context, taskID string, opts Options, database
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// случайный порядок — выбираем что копировать до начала копирования
|
||||||
|
rand.Shuffle(len(files), func(i, j int) { files[i], files[j] = files[j], files[i] })
|
||||||
|
|
||||||
_, free, err := disk.DiskUsage(opts.MountPath)
|
_, free, err := disk.DiskUsage(opts.MountPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fail(err)
|
fail(err)
|
||||||
@@ -160,11 +164,12 @@ func (c *Copier) run(ctx context.Context, taskID string, opts Options, database
|
|||||||
}
|
}
|
||||||
|
|
||||||
if f.size > available {
|
if f.size > available {
|
||||||
|
// файл не влезает — пробуем следующий
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
msg := fmt.Sprintf("Копирование %s (%d/%d)", filepath.Base(f.srcAbs), i+1, total)
|
|
||||||
prog := int(float64(i+1) / float64(total) * 100)
|
prog := int(float64(i+1) / float64(total) * 100)
|
||||||
|
msg := fmt.Sprintf("Копирование %s (%d/%d)", filepath.Base(f.srcAbs), i+1, total)
|
||||||
setStatus(task.StatusRunning, msg, prog)
|
setStatus(task.StatusRunning, msg, prog)
|
||||||
|
|
||||||
// destination mirrors source structure under destRoot
|
// destination mirrors source structure under destRoot
|
||||||
|
|||||||
Reference in New Issue
Block a user