SmartCopy v0.1.0
Windows 파일 복사 · 이동

끊겨도 이어서,
지우기 전에 확인하고.

탐색기의 복사 대화상자는 중간에 끊기면 어디까지 갔는지 알려주지 않습니다. SmartCopy는 작업을 큐에 담아 일시정지·재개하고, 복사한 파일을 검증한 뒤에야 이동의 원본을 지웁니다. USB를 뽑아도, NAS가 끊겨도, 재부팅해도 진행 상황이 남습니다.

설치 없이 실행 · 관리자 권한 불필요 · Windows 10 / 11 (64비트)

실제 화면 구성 · 예시 데이터
SmartCopy v0.1.0 관리자 콘솔로그─ □ ✕
원본
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 GB

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초 간격으로 자동 재시도합니다. 그래도 안 되면 실패 목록에 남고, 재시도 버튼으로 그 파일들만 다시 돌립니다 — 폴더 구조는 그대로 유지한 채로.

10만 개를 넣어도

큐가 순서를 잡습니다

다루는 것방식
청크 크기매체를 보고 고릅니다 — 고정 디스크 4 MB, USB 1 MB, 네트워크 256 KB. 일시정지·취소는 청크 경계에서 반응하므로 무작정 키우지 않습니다.
동시 작업기본 2개. 같은 디스크를 여러 작업이 동시에 때리면 전체가 느려지기 때문입니다.
우선순위작업마다 우선순위를 두고, 높은 것부터 내보냅니다. 같으면 담은 순서대로.
대량 열거scandir 기반으로 훑고, 심볼릭 링크·정션은 따라가지 않아 순환 복사에 빠지지 않습니다.
긴 경로 · 한글260자 제한을 우회하는 경로 접두사를 붙여 다룹니다. 유니코드 이름은 그대로.
진행률 갱신0.2초에 한 번으로 묶습니다 — 10만 개에서 화면 갱신이 복사보다 비싸지지 않도록.
동시 파일한 작업 안에서 파일 여러 개를 동시에 복사합니다(최대 16). 작은 파일이 많거나 NAS 일 때 효과가 큽니다.
속도 제한초당 바이트 상한. 백업을 돌리면서 회의를 해야 할 때. 워커들이 같은 버킷을 공유합니다.
걸러내기포함/제외 패턴, 폴더 통째 제외, 크기·날짜 범위, 숨김 파일 제외.
미리보기아무것도 쓰지 않고 무엇이 옮겨질지만 계산합니다.
시작 전 점검대상 여유 공간, 대상이 원본 하위인지, 보호 경로인지, 원본 존재 여부를 먼저 확인합니다.
여러 작업을 한자리에서

관리자 콘솔

창 UI 가 지금 옮기는 중을 본다면, 콘솔은 전체를 봅니다. 큐·기록·복구·로그·검사가 한 화면에 있습니다. smartcopy-cli admin 또는 창 UI 의 관리자 콘솔 버튼으로 엽니다.

보는 것

  • 진행 배너 — 여러 작업의 합계 진행률·속도·남은 시간
  • 작업 카드 — 상태 칩, 진행률, 성공/동일/건너뜀/실패
  • 작업 상세 — 실패 목록과 이유, 경고, 평균 속도
  • 복구 — 끊긴 작업을 골라서 이어서 하거나 버리기
  • 무결성 검사 — 매니페스트로 대상이 그대로인지 대조

조작하는 것

  • 새 작업 — 경로 고르기 창, 필터, 성능 옵션
  • 시작 전 점검 — 보호 경로·여유 공간을 미리 알려줍니다
  • 일시정지 / 재개 / 취소 / 실패분 재시도 (개별·전체)
  • 동시 실행 작업 수 조절

콘솔은 127.0.0.1 에만 열리고, 실행할 때마다 새로 만든 토큰이 있어야 들어갑니다. 바깥 도메인이 이 주소를 가리키게 만드는 수법(DNS 리바인딩)은 Host 검사에서, 다른 사이트가 브라우저를 시켜 보내는 요청은 Origin 검사에서 막습니다.

창 없이

명령줄에서도 같은 엔진

배치 파일과 작업 스케줄러에는 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 아래에만 씁니다.

창 UI

SmartCopy.exe

드래그 앤 드롭으로 담고, 작업 카드로 진행 상황을 봅니다. 탐색기 우클릭 메뉴도 이 파일을 부릅니다.

명령줄

smartcopy-cli.exe

copy · move · recover · verify · shell. 스크립트와 스케줄러에서 쓰기 좋습니다.

탐색기 우클릭 연동

파일이나 폴더를 우클릭해 SmartCopy에 담기, 옮겨갈 폴더에서 SmartCopy 대상으로 지정. 여러 번 나눠 담아도 한 창에 모입니다.

등록은 HKEY_CURRENT_USER 아래에만 — 해제는 shell --uninstall 한 번

필요한 것

  • Windows 10 / 11 (64비트)
  • 관리자 권한 필요 없음
  • SMB · NAS · USB · 이동식 디스크 지원
  • 소스로 쓰려면 Python 3.9 이상 (표준 라이브러리만 사용)