simple sync endy1328
winget install --id=Endy1328.SimpleSync -e simple sync is a Windows desktop app that copies changed files from one or more source folders to target folders on a schedule or on demand.
winget install --id=Endy1328.SimpleSync -e simple sync is a Windows desktop app that copies changed files from one or more source folders to target folders on a schedule or on demand.
simple sync는 특정 소스 디렉터리에서 타겟 디렉터리로 변경된 파일을 단방향 복사해 주는 간단한 Windows 데스크톱 앱입니다.
현재 버전은 1.2.1입니다. 버전 변경 이력은 CHANGELOG.md에 기록하고, 현재 배포 버전은 VERSION 파일에 저장합니다.


Copy changes 또는 Mirror source 모드를 선택할 수 있습니다.A -> B, C -> D처럼 2개 이상의 동기화 쌍을 설정할 수 있습니다.Sync pairs 목록에서 확인하고, 선택한 쌍의 상태는 Activity 헤더에서 확인할 수 있습니다.Progress 셀 툴팁으로 확인할 수 있습니다.All, Selected, Errors 기준으로 필터링할 수 있습니다.Sync Now 버튼을 누르면 즉시 동기화를 실행합니다.대상이 없습니다.를 표시합니다.Add Pair, Remove, Choose Source, Choose Target, Edit Filter... 버튼으로 동기화 쌍을 관리합니다.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
Windows x64 Release 빌드 생성:
dotnet publish -c Release -r win-x64 --self-contained false
배포용 실행 파일 위치:
bin\Release\net10.0-windows\win-x64\publish\simple sync.exe
이 빌드는 framework-dependent 방식이므로 대상 PC에 호환되는 .NET Windows Desktop Runtime이 필요합니다.
SI 현장처럼 사용자 제작 exe 실행이 제한된 환경을 위해 scripts 폴더에 fallback 스크립트를 제공합니다.
PowerShell fallback:
.\scripts\simple-sync.ps1 -ConfigPath .\config.toml
1회만 실행:
.\scripts\simple-sync.ps1 -ConfigPath .\config.toml -Once
이 스크립트는 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를 적용하지 않으므로 필터가 필요한 경우 앱 실행을 권장합니다.
비상용 robocopy cmd 예제:
scripts\simple-sync-robocopy.cmd "\\wsl.localhost\Ubuntu-24.04\home\u24\projects\spring-lean\docs" "C:\프로젝트 자료\GSNext Phase2\01. 준비"
simple-sync-robocopy.cmd는 경로를 인자로 받는 최소 예제입니다. 인자를 생략하면 파일 안의 fallback SOURCE, TARGET 값을 사용합니다.
Windows 설치 프로그램은 Inno Setup 기반으로 생성합니다.
소스 코드, 아이콘, 스크립트, README, config.example.toml 등 설치본에 포함되는 파일이 변경되면 아래 명령을 다시 실행해 dist\simple-sync-setup.exe를 새로 생성해야 합니다.
사전 준비:
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에 업로드하려면 먼저 설치 프로그램을 생성합니다.
.\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를 사용합니다.
다른 저장소, 브랜치, 파일을 지정해야 하는 경우:
.\scripts\create-github-release.ps1 `
-Repository "endy1328/simple-sync" `
-Target "main" `
-Version "1.2.1" `
-InstallerPath ".\dist\simple-sync-setup.exe" `
-NotesPath ".\release-notes-1.2.1.md"
스크립트는 설치 파일의 SHA256도 출력합니다. 이 값은 winget manifest의 InstallerSha256에 사용합니다.
winget manifest는 이 저장소 안에 만들지 않고, microsoft/winget-pkgs를 fork한 별도 저장소에서 관리합니다.
권장 위치:
C:\workspace\winget-pkgs
simple sync 1.2.1 manifest 위치:
C:\workspace\winget-pkgs
└─ manifests
└─ e
└─ Endy1328
└─ SimpleSync
└─ 1.2.1
├─ Endy1328.SimpleSync.yaml
├─ Endy1328.SimpleSync.installer.yaml
└─ Endy1328.SimpleSync.locale.en-US.yaml
검증:
cd C:\workspace\winget-pkgs
winget validate .\manifests\e\Endy1328\SimpleSync\1.2.1
로컬 manifest 설치 테스트는 관리자 권한 PowerShell에서 아래 기능을 한 번 켠 뒤 실행합니다.
winget settings --enable LocalManifestFiles
winget install --manifest .\manifests\e\Endy1328\SimpleSync\1.2.1
공식 winget 등록은 C:\workspace\winget-pkgs에서 변경분을 커밋하고 microsoft/winget-pkgs로 PR을 제출해야 완료됩니다.
config.toml은 simple sync.exe와 같은 폴더에 저장됩니다. 앱은 시작 시 이 파일을 읽고, 화면에서 설정이 변경되거나 앱이 종료될 때 최신 값을 저장합니다.
저장소에는 개인 경로가 들어가는 실제 config.toml 대신 config.example.toml 예제 파일만 포함합니다.
interval_seconds = 10
skin = "syncback_blue"
language = "ko-KR"
window_width = 1720
window_height = 1120
[[filter_presets]]
name = "Documents"
extensions = [".docx", ".xlsx", ".pdf", ".txt", ".md"]
[[filter_presets]]
name = "Images"
extensions = [".png", ".jpg", ".svg"]
[[filter_presets]]
name = "Code"
extensions = [".cs", ".js", ".json", ".xml", ".md"]
[[filter_presets]]
name = "Archives"
extensions = [".zip", ".7z", ".tar"]
[[filter_presets]]
name = "Exclude temp/build"
exclude = ["*.tmp", ".git/**", "bin/**", "obj/**", "node_modules/**"]
[[pairs]]
name = "Main Backup"
enabled = true
mode = "copy"
source = "C:\\source"
target = "D:\\backup"
extensions = [".md", ".pdf"]
files = ["README.md", "docs/setup.md"]
include = ["docs/**"]
exclude = ["bin/**", "obj/**", ".git/**", "*.tmp"]
include_subdirectories = true
사용자 이미지 스킨은 지원하지 않고, 코드에 정의된 내장 스킨만 제공합니다.
현재 내장 스킨:
Fluent LightSyncBack BlueGraphite DarkWarm FolderSoft Mint마지막으로 선택한 스킨은 config.toml에 저장되며 다음 실행 시 자동으로 적용됩니다.
[Pair Name] prefix와 Source -> Target 진행경로로 표시됩니다.Mode는 기본값 Copy changes입니다.Copy changes 모드는 타겟에 없거나 변경된 파일만 복사하고, 타겟에만 있는 파일은 유지합니다.Mirror source 모드는 복사 후 소스에 없는 타겟 파일과 디렉터리를 삭제해 두 폴더의 파일 구성을 맞춥니다.extensions, files, include는 OR 조건으로 포함 대상을 정하고, exclude는 항상 우선 적용됩니다.files는 소스 폴더 기준의 정확한 상대 경로입니다. 예를 들어 C:\source\docs\setup.md는 docs/setup.md로 입력합니다.include와 exclude는 glob 패턴입니다. 예: docs/**, reports/*.pdf, *.tmp.Copy changes에서도 복사하지 않고, Mirror source에서도 삭제하지 않습니다.include_subdirectories = false이면 소스 루트 직속 파일만 검사합니다.[[filter_presets]] 항목을 수정하면 Edit Filter... 팝업의 프리셋 버튼 이름과 자동 입력 값을 바꿀 수 있습니다.config.toml에 mode가 없으면 자동으로 copy로 처리합니다.Mirror source 모드에서도 소스 탐색이나 복사 중 실패가 있으면 안전을 위해 삭제 단계는 건너뜁니다.현재 변경 감지는 파일 내용 해시가 아니라 파일 크기와 마지막 수정 시간 기준입니다.
Git에 포함:
README.mdCHANGELOG.mdVERSIONconfig.example.toml.gitignorescripts/simple-sync.ps1scripts/simple-sync-robocopy.cmdscripts/publish-installer.ps1scripts/create-github-release.ps1release-notes-*.mdinstaller/simple-sync.isstests/SimpleSync.TestsGit에서 제외:
bin/obj/artifacts/config.tomlAssets/extracted-app-icon.pngAGENT.md: 프로젝트 작업 에이전트를 위한 영문 운영 규칙AGENT_kor.md: 에이전트 운영 규칙 한국어 버전HARNESS.md: 영문 빌드 및 검증 하네스 문서HARNESS_kor.md: 빌드 및 검증 하네스 한국어 버전이어서 개발할때.md: 다른 세션에서 이어서 개발하기 위한 한국어 인수인계 문서