저장소를 통째로 전달하려면 21.6GB(.git 8.2 / Doc 5.1 / _out 1.2 / packages 1.1 …)를
옮겨야 했다. 실제로 필요한 것은 Visual Studio에서 다시 빌드할 수 있는 소스뿐이고,
그 집합은 2,025개 / 20.2MB → 압축 후 5.8MB 다.
압축 암호는 ub8877 이다. AutoZip.bat 상단 PW 변수에 정의돼 있고 7za 의 -p 로 넘어간다.
zip 기본 암호화(ZipCrypto)를 쓴다 — AES-256 은 구버전 알집에서 열리지 않는 사례가 있어
호환을 택했다. 바꾸려면 압축 명령에 -mem=AES256 만 붙이면 된다.
암호가 걸린 사내 전달용 아카이브이며 자격증명이 아니다.
동작
- 배치파일 위치(%~dp0)를 기준으로만 동작한다. 절대경로 없음.
- 파일 목록을 박아두지 않고 확장자 화이트리스트로 거른다. .cs/.xaml 을 추가해도
이 배치파일은 고칠 필요가 없다.
- 포함: .sln .csproj .cs .xaml .resx .config .settings .manifest .snk
+ 빌드 리소스 이미지(.png .ico .jpg .bmp .gif .cur .ttf)
csproj 에 <Resource Include="Resources\*.png" /> 가 있어 이미지를 빼면 빌드가 깨진다.
- 제외: obj bin .git .vs packages _out* External Doc docs _dummyImages
_workspace .claude .serena __pycache__ 및 이전 *.zip
- 결과물은 루트에 ILSOS_All_src_YYYYMMDD_HHmmss.zip 으로 떨어지고,
다음 실행 때 압축 대상에서 제외된다(.gitignore 에도 등록).
tools/7za.exe (7-Zip 18.05 x64, 단독 실행본)를 동봉했다. Windows 기본 tar/Compress-Archive
는 암호 zip 을 만들지 못하고 이 PC에 7-Zip 이 설치돼 있지 않아 설치 없이 돌아가게 했다.
7-Zip 은 LGPL 이라 재배포 가능하다.
인코딩은 CP949 로 저장했다. UTF-8 + chcp 65001 조합은 cmd 가 배치 실행 도중 코드페이지를
바꿀 때 파일 읽기 위치가 어긋나 이후 줄이 통째로 오파싱된다(실행 실패 확인).
검증: zip 생성/암호(무암호 테스트 실패·정상 암호 통과)/포함(.cs 1365 .xaml 289 .resx 59
.csproj 45)/제외 전 항목 0건/재실행 시 이전 zip 미포함/cmd 한글 출력 정상.
한계 — External·packages 를 제외하므로 받는 쪽에서 참조 DLL 과 NuGet 패키지는 따로 확보해야 한다.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
81 lines
2.5 KiB
Batchfile
81 lines
2.5 KiB
Batchfile
@echo off
|
|
setlocal
|
|
|
|
rem ============================================================
|
|
rem ILSOS 소스 백업 - 빌드에 필요한 소스만 암호 zip 으로 묶는다.
|
|
rem
|
|
rem - 배치파일이 있는 폴더를 기준(상대경로)으로 동작한다.
|
|
rem - 파일 목록을 박아두지 않고 확장자로 거르므로,
|
|
rem .cs / .xaml 을 추가해도 이 파일을 고칠 필요가 없다.
|
|
rem - 결과 zip 은 다음 실행 때 압축 대상에서 제외된다.
|
|
rem ============================================================
|
|
|
|
cd /d "%~dp0"
|
|
|
|
set "PW=ub8877"
|
|
set "PF86=%ProgramFiles(x86)%"
|
|
|
|
rem ---- 압축기 찾기 : 동봉본 우선, 없으면 설치본 ----
|
|
set "SEVENZIP="
|
|
if exist "tools\7za.exe" set "SEVENZIP=tools\7za.exe"
|
|
if not defined SEVENZIP if exist "%ProgramFiles%\7-Zip\7z.exe" set "SEVENZIP=%ProgramFiles%\7-Zip\7z.exe"
|
|
if not defined SEVENZIP if exist "%PF86%\7-Zip\7z.exe" set "SEVENZIP=%PF86%\7-Zip\7z.exe"
|
|
|
|
if not defined SEVENZIP (
|
|
echo.
|
|
echo [오류] 압축기를 찾지 못했습니다.
|
|
echo tools\7za.exe 가 없고 7-Zip 도 설치되어 있지 않습니다.
|
|
echo tools\7za.exe 를 복원하거나 7-Zip 을 설치한 뒤 다시 실행하세요.
|
|
echo.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
rem ---- 타임스탬프 (%date% 는 로케일 의존이라 PowerShell 로 받는다) ----
|
|
set "TS="
|
|
for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set "TS=%%i"
|
|
if not defined TS set "TS=notime"
|
|
|
|
set "OUT=ILSOS_All_src_%TS%.zip"
|
|
|
|
echo.
|
|
echo 압축기 : %SEVENZIP%
|
|
echo 대상 : %CD%
|
|
echo 출력 : %OUT%
|
|
echo 암호 : %PW%
|
|
echo.
|
|
echo 압축 중... (빌드에 필요한 소스만)
|
|
echo.
|
|
|
|
"%SEVENZIP%" a -tzip -mx=9 -p%PW% "%OUT%" ^
|
|
-ir!*.sln -ir!*.csproj -ir!*.cs -ir!*.xaml -ir!*.resx -ir!*.config ^
|
|
-ir!*.settings -ir!*.manifest -ir!*.snk ^
|
|
-ir!*.png -ir!*.ico -ir!*.jpg -ir!*.jpeg -ir!*.bmp -ir!*.gif -ir!*.cur -ir!*.ttf ^
|
|
-xr!obj -xr!bin -xr!.git -xr!.vs -xr!packages -xr!_out* -xr!_intermediate ^
|
|
-xr!intermediate* -xr!_workspace -xr!_release -xr!_test -xr!Doc -xr!docs ^
|
|
-xr!External -xr!.claude -xr!.ubisam_agent -xr!.serena -xr!__pycache__ ^
|
|
-xr!UnTrackedLocalFiles -xr!_dummyImages -xr!tools -xr!*.zip -xr!*.7z -xr!*.rar
|
|
|
|
if errorlevel 1 (
|
|
echo.
|
|
echo [오류] 압축에 실패했습니다. 위 메시지를 확인하세요.
|
|
echo.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
set "SIZE=0"
|
|
for %%F in ("%OUT%") do set "SIZE=%%~zF"
|
|
set /a SIZE_MB=%SIZE% / 1048576
|
|
|
|
echo.
|
|
echo ============================================================
|
|
echo [완료] %OUT%
|
|
echo %CD%\%OUT%
|
|
echo 약 %SIZE_MB% MB (%SIZE% bytes)
|
|
echo 암호 : %PW%
|
|
echo ============================================================
|
|
echo.
|
|
pause
|
|
exit /b 0
|