SmartCopy v0.3.1
Копирование и перенос файлов в Windows

Продолжает после обрыва,
проверяет перед удалением.

Если копирование в Проводнике прервалось, он не скажет, до какого места дошёл. SmartCopy ставит работу в очередь, позволяет приостановить и продолжить, и удаляет источник при переносе только после проверки копии. Вынимайте USB, теряйте NAS, перезагружайтесь — прогресс остаётся.

Без установки · без прав администратора · Windows 10 / 11 (64-бит)

Реальный вид · демонстрационные данные
SmartCopy v0.3.1 Консоль администратораЖурнал─ □ ✕
Источник
D:\Фото 2024
D:\Оригиналы камеры
Назначение
E:\Резерв
Действие
КопироватьПереместить
Проверить
SHA-256
Запустить
Фото 2024 → Резерв Выполняется
12,481 / 20 004 файлов 14.2 GB / 22.8 GB 186 MB/s Осталось 00:47

12 481 готово · 0 пропущено · 0 ошибок · осталось 8,6 ГБ

D:\Фото 2024\2024-07\IMG_4821.ARW

Пауза Отмена
Архив проекта → NAS Ожидание переподключения
3,902 / 6 110 файлов 41.0 GB / 64.3 GB Приостановлено

Устройство отключено — продолжит, когда вернётся (WinError 64)

Счета → Архив Готово
412 / 412 файлов SHA-256 проверен
Порядок переноса

Источник удаляется последним

Перенос — это три шага: каждый ждёт предыдущего.

Шаг 1

Копировать

пишет в назначение как .scpart временный файл. Окончательное имя он получает только после полной записи, поэтому недописанный файл никогда не выглядит целым.

Шаг 2

Проверить

Сравниваются размер и время изменения, а по запросу и SHA-256. При расхождении копия удаляется и пишется заново.

Шаг 3

Удаление источника

Источник теряют только проверенные файлы. У пропущенных он остаётся, а пустые папки убираются в конце.

Перенос в пределах одного диска — это просто переименование: быстро и вовсе без промежуточного состояния. Три шага выше нужны только при переходе между дисками.

Когда имя уже занято

Шесть правил при конфликте

Задайте заранее при создании задания или пусть спрашивает каждый раз. Если выбрать «спрашивать», в диалоге есть Применять и к последующим конфликтам.

ПравилоЧто делаетКогда пригодится
overwriteПерезаписывает назначениеОдносторонние резервные копии, где источник всегда свежее
skipПропускает и не трогает источникДозаполнить только недостающее
renameимя (1).расшкак новый файлКогда нужны оба (по умолчанию)
keep_newerОставляет более свежий по времениСлияние папки, изменённой с обеих сторон
keep_largerОставляет тот, что большеКогда среди файлов есть обрезанные
askПоказывает оба размера и времени и спрашиваетКогда каждый случай требует решения
Обрывы · отключения · потеря питания

Он помнит, где остановился

Прогресс живёт не только на экране — он пишется на диск. Закрытие приложения или потеря питания не отбрасывают к началу.

Журнал задания

Каждый завершённый файл дописывается одной строкой. Поскольку идёт только дозапись, сбой питания портит максимум последнюю строку — её просто отбрасывают.

  • Запустите снова — готовые файлы пропускаются
  • Успешно завершённое задание само удаляет свой журнал
  • При запуске находит незавершённые задания и спрашивает, продолжать ли

%LOCALAPPDATA%\SmartCopy\jobs\

Продолжение внутри одного файла

Для большого файла .scpartсохраняется ровно то, сколько успело записаться. Продолжение начинается лишь после того, как соседний файл подтвердит, что размер и время изменения источника прежние.

  • Если источник изменился — начинает заново, а не продолжает
  • Остатки от другого задания убираются сразу

USB вынули · NAS отвалился

Исчезновение устройства не считается ошибкой — задание переходит в Ожидание переподключения Когда оно возвращается, работа продолжается с места остановки.

WinError 21 · 53 · 59 · 64 · 1167

Только неудавшиеся файлы, ещё раз

Временные помехи — например, файл, занятый другой программой — повторяются автоматически через 0,5 с, затем 2 с, затем 5 с. То, что всё равно не вышло, попадает в список, и кнопка Повтор запускает заново только их — структура папок остаётся прежней.

Когда никого нет

Настройте один раз — работает само

Если каждый раз нажимаете одно и то же — это работа для программы.

Отслеживаемая папка

Когда файлы приходят и всё затихает, запускается сохранённое задание. Файл, который ещё пишется, не трогается — ждём, пока изменения прекратятся.

smartcopy-cli watch "Поставка" --folder D:\СбросКарты

Планировщик заданий

Каждый день в 3 часа ночи или при входе в систему. Без прав администратора, и удалить можно прямо в Планировщике заданий Windows.

smartcopy-cli schedule --install "Еженедельная копия" --when daily --at 03:00

Правый клик в Проводнике

Правый клик по папке — появляются сохранённые задания. Выбор заполняет окно этими настройками, «Начать» нажимаете вы.

Акты подтверждают друг друга

Один акт легко выбросить. Поэтому каждый несёт хеш предыдущего — уберите один из середины, и цепочка обрывается.

smartcopy-cli ledger --verify

Это не служба меток времени. Она мешает другому: поставить десять раз, а показать только девять удобных.

Даже если их 100 000

Очередь задаёт порядок

Что охватываетКак
Размер блокаВыбирается по носителю — 4 МБ для жёстких дисков, 1 МБ для USB, 256 КБ для сети. Пауза и отмена срабатывают на границах блоков, поэтому его не увеличивают без нужды.
Одновременные заданияПо умолчанию два: когда несколько заданий бьют в один диск, медленнее становится всё.
ПриоритетУ каждого задания есть приоритет, более высокие идут первыми. При равенстве сохраняется порядок добавления.
Массовое перечислениеscandir обходит дерево и не переходит по символьным ссылкам и соединениям, поэтому не попадает в цикл копирования.
Длинные пути · ЮникодОбрабатываются с префиксом пути, обходящим предел в 260 символов. Юникод-имена остаются как есть.
Обновление прогрессаСводятся к одному разу в 0,2 с — чтобы на 100 000 файлов отрисовка экрана не стоила дороже самого копирования.
Файлов одновременноВ рамках одного задания несколько файлов копируются одновременно (до 16). Больше всего это даёт при множестве мелких файлов или по NAS.
Ограничение скоростиПотолок в байтах в секунду. На случай, когда резервное копирование идёт во время совещания. Рабочие потоки делят одно ведро.
ФильтрацияШаблоны включения и исключения, исключение папок целиком, диапазоны размера и даты, пропуск скрытых файлов.
ПредпросмотрВычисляет, что было бы перенесено, ничего не записывая.
Проверки перед стартомСвободное место в назначении, не находится ли назначение внутри источника, не защищённый ли это путь и существуют ли источники — всё проверяется заранее.

Он медленнее robocopy. Потому что для каждого файла он записывает данные для возобновления, проверяет скопированное и пишет в журнал — ради этих трёх вещей программа и создана. На внутреннем SSD это примерно в 5-15 раз медленнее на множестве мелких файлов и примерно в 7 раз на одном большом. Замеры и методика лежат в репозитории.

Все задания в одном месте

Консоль администратора

Окно показывает, что идёт сейчас; консоль — всё сразу: очередь, история, восстановление, журналы, проверка. smartcopy-cli admin либо кнопкой Консоль администратора в окне.

Что видно

  • Полоса прогресса — суммарный прогресс, скорость и остаток времени
  • Карточки заданий — метка состояния, прогресс, готово / одинаковые / пропущено / ошибки
  • Сведения о задании — список ошибок с причинами, предупреждения, средняя скорость
  • Восстановление — продолжить прерванное задание или отбросить его
  • Проверка целостности — сверить назначение с манифестом

Что можно сделать

  • Новое задание — выбор путей, фильтры, параметры производительности
  • Предпроверка — защищённые пути и свободное место сообщаются заранее
  • Пауза / продолжение / отмена / повтор ошибок (одно задание или все)
  • Настройка числа одновременных заданий

Консоль открывается только на 127.0.0.1 и требует токен, создаваемый заново при каждом запуске. Внешний домен, указывающий на этот адрес (DNS rebinding), останавливает проверка Host , а запрос, который другой сайт заставляет отправить ваш браузер, останавливает проверка Origin .

Без окна

Тот же движок в командной строке

Для bat-файлов и Планировщика заданий берите smartcopy-cli.exe.

# копировать папку + проверить SHA-256 > smartcopy-cli copy "D:\Фото 2024" E:\Резерв --verify hash [running] [################----] 83.3% 14.2 GB/22.8 GB 186 MB/s ETA 00:47 # перенос — переименовать, если имя занято > smartcopy-cli move C:\Архив E:\Склад --conflict rename # посмотреть прерванные задания и продолжить > smartcopy-cli recover > smartcopy-cli recover --resume # сверить сделанную ранее копию > smartcopy-cli verify D:\Источник E:\Резерв\Источник --level hash # зарегистрировать меню Проводника (текущий пользователь, без прав админа) > smartcopy-cli shell --install
Скачать

Ни то, ни другое устанавливать не нужно

Настройки и журналы лежат в %LOCALAPPDATA%\SmartCopy и больше нигде.

Оконный интерфейс

SmartCopy.exe

Перетащите файлы, а ход работы смотрите на карточках. Контекстное меню Проводника вызывает этот же файл.

13.6 MB · SHA-256 2e1f9b91034f8cea14cf6d2236741b7a165b25ebaf364e1b9a7d203578892197

Скачать

Командная строка

smartcopy-cli.exe

copy · move · recover · verify · shell. Удобно для скриптов и планировщиков.

13.6 MB · SHA-256 d3f8f003b8d1f2b22faf621b5b1531c73a6e456315124e609be43b9e55d53c96

Скачать

Интеграция с меню Проводника

Щёлкните правой кнопкой по файлу или папке — Добавить в SmartCopyа в папке, куда переносите, Назначить целью SmartCopy. Добавляйте в несколько приёмов — всё соберётся в одном окне.

Регистрируется только в HKEY_CURRENT_USER — одна команда shell --uninstall всё отменяет

Что нужно

  • Windows 10 / 11 (64-бит)
  • Права администратора не нужны
  • Работает с SMB · NAS · USB · съёмными дисками
  • Python 3.9 или новее для запуска из исходников (только стандартная библиотека)