Simple Sync is a Windows desktop application designed to synchronize files by copying changed items from one or more source folders to target folders either on a scheduled basis or manually. The tool provides flexible options for managing file synchronization, making it an efficient solution for users seeking reliable and customizable data management.
Key Features:
Sync Modes: Supports both "Copy changes" (to replicate only modified files) and "Mirror source" (to ensure target folders match the source exactly, including deletions).
Multiple Sync Pairs: Allows configuration of multiple independent sync pairs, enabling users to manage various file synchronization tasks simultaneously.
File Filtering: Offers extensive filtering capabilities, including support for include/exclude patterns, specific file extensions, and selective directories, ensuring precise control over which files are synced.
Customizable UI: Features a user-friendly interface with adjustable columns, built-in themes (skins), and language support (English or Korean) to suit individual preferences.
Audience & Benefit:
Ideal for users who need to automate file backups or maintain synchronized copies across multiple locations. Simple Sync is particularly beneficial for those managing large datasets or requiring consistent data replication without complex setup or management overhead. Its ability to handle multiple sync tasks and apply detailed filters makes it a versatile tool for both personal and professional use.
Installation via winget simplifies deployment, ensuring users can quickly set up the application on their systems.
README
simple sync
simple sync는 특정 소스 디렉터리에서 타겟 디렉터리로 변경된 파일을 단방향 복사해 주는 간단한 Windows 데스크톱 앱입니다.
현재 버전은 1.2.1입니다. 버전 변경 이력은 CHANGELOG.md에 기록하고, 현재 배포 버전은 VERSION 파일에 저장합니다.
주요 기능
설정된 소스/타겟 쌍을 지정한 초 단위 간격으로 확인합니다.
소스 전체를 훑되, 타겟에 없거나 변경된 파일만 복사하는 기본 모드를 제공합니다.
동기화 쌍별로 Copy changes 또는 Mirror source 모드를 선택할 수 있습니다.
A -> B, C -> D처럼 2개 이상의 동기화 쌍을 설정할 수 있습니다.
각 동기화 쌍에 이름을 붙이고 Activity 로그에서 이름으로 구분할 수 있습니다.
동기화 쌍별로 확장자, 특정 파일, include/exclude 패턴 필터를 설정할 수 있습니다.
각 동기화 쌍의 진행률은 Sync pairs 목록에서 확인하고, 선택한 쌍의 상태는 Activity 헤더에서 확인할 수 있습니다.
현재 처리 중인 파일이나 경로는 Progress 셀 툴팁으로 확인할 수 있습니다.
Activity 로그는 All, Selected, Errors 기준으로 필터링할 수 있습니다.
Add Pair로 새로 추가한 동기화 쌍은 경로 입력 중 자동 실행되지 않도록 기본 Off 상태로 시작합니다.
Sync pairs 목록의 컬럼 폭을 드래그해서 조절할 수 있고, 긴 경로는 가로 스크롤로 확인할 수 있습니다.
Skin 콤보박스에서 내장 스킨을 선택할 수 있습니다.
언어 콤보박스에서 한국어 또는 English를 선택할 수 있습니다.
Sync pairs와 Activity 사이의 구분선을 드래그해 영역 높이를 조절할 수 있습니다.
마지막으로 종료한 창 크기를 기억하고 다음 실행 때 같은 크기로 엽니다.
하단 상태 영역에 현재 프로그램 버전을 표시합니다.
실행 파일 옆의 config.toml에서 설정을 불러오고, 화면에서 바뀐 값을 다시 저장합니다.
중복 실행을 막아 같은 앱이 여러 개 떠서 파일을 잠그는 상황을 줄입니다.
이 앱은 양방향 동기화를 수행하지 않습니다. Mirror source 모드에서는 소스에 없는 타겟 파일을 삭제할 수 있으므로 중요한 타겟 폴더에는 주의해서 사용해야 합니다.
다국어 설정
상단 툴바의 언어 콤보박스에서 한국어 또는 English를 선택할 수 있습니다.
선택한 언어는 config.toml의 language 값으로 저장되며 다음 실행 시 자동으로 복원됩니다.
기존 설정 파일에 language가 없어도 실행 가능하며 기본값은 ko-KR입니다.
내부 동기화 방식 값은 계속 copy, mirror로 저장되므로 기존 설정과 호환됩니다.
실행
프로젝트 폴더에서 실행:
dotnet run
dotnet run은 필요한 경우 자동으로 빌드한 뒤 실행합니다.
Debug 빌드는 설치된 Release 앱과 다른 단일 인스턴스 키를 사용하므로, 설치본을 실행한 상태에서도 개발용 dotnet run 앱을 동시에 띄워 비교 테스트할 수 있습니다.
Debug 빌드로 실행한 앱은 창 제목에 (Debug), 하단 상태 영역에 Debug를 표시합니다.
컴파일만 확인:
dotnet build
동기화 엔진 테스트 실행:
dotnet run --project .\tests\SimpleSync.Tests\SimpleSync.Tests.csproj
이 스크립트는 config.toml의 interval_seconds와 [[pairs]] 설정을 읽고 Windows 기본 도구인 robocopy를 호출합니다.
mode = "copy"는 robocopy /E, mode = "mirror"는 robocopy /MIR로 실행됩니다.
앱의 세부 필터 규칙은 Windows Forms 앱 엔진 기준으로 동작합니다. PowerShell fallback은 현재 include, exclude, extensions, files, include_subdirectories를 적용하지 않으므로 필터가 필요한 경우 앱 실행을 권장합니다.
simple-sync-robocopy.cmd는 경로를 인자로 받는 최소 예제입니다. 인자를 생략하면 파일 안의 fallback SOURCE, TARGET 값을 사용합니다.
설치 프로그램 생성
Windows 설치 프로그램은 Inno Setup 기반으로 생성합니다.
소스 코드, 아이콘, 스크립트, README, config.example.toml 등 설치본에 포함되는 파일이 변경되면 아래 명령을 다시 실행해 dist\simple-sync-setup.exe를 새로 생성해야 합니다.
사전 준비:
Inno Setup 6 설치
ISCC.exe가 PATH에 있거나 기본 설치 경로에 있어야 합니다.
설치용 self-contained staging 생성:
.\scripts\publish-installer.ps1 -SkipInno
설치 프로그램 생성:
.\scripts\publish-installer.ps1
소스 수정 후 설치본을 갱신할 때도 동일하게 아래 명령만 실행하면 됩니다.
.\scripts\publish-installer.ps1
이 스크립트 안에서 설치본용 dotnet publish와 Inno Setup 컴파일을 함께 실행합니다.
설치 파일 버전은 VERSION 파일의 값을 사용합니다.
따라서 설치본 생성을 위해 dotnet publish -c Release -r win-x64 --self-contained false를 별도로 먼저 실행할 필요는 없습니다.
사전 확인만 하고 싶다면 먼저 빌드만 실행할 수 있습니다.
dotnet build
생성 결과:
dist\simple-sync-setup.exe
설치 프로그램은 .NET Windows Desktop Runtime이 없는 PC에서도 실행되도록 self-contained publish 결과를 포함합니다.
기존 dist\simple-sync-setup.exe가 있어도 스크립트가 최신 publish 결과로 덮어써서 다시 만듭니다.
GitHub Release 생성
설치 파일을 GitHub Release에 업로드하려면 먼저 설치 프로그램을 생성합니다.
.\scripts\publish-installer.ps1
Release 생성 전 확인:
.\scripts\create-github-release.ps1 -DryRun
실제 Release 생성:
.\scripts\create-github-release.ps1
기본값은 VERSION 파일의 버전을 읽어 v버전 태그를 만들고, dist\simple-sync-setup.exe와 release-notes-버전.md를 사용합니다.
예를 들어 VERSION이 1.2.1이면 v1.2.1 태그와 release-notes-1.2.1.md를 사용합니다.