퍼포스 서버에서 여러 파일 한 번에 정리하기
퍼포스 서버를 관리하다 보면 대량의 바이너리 파일로 인해 서버 디스크가 점점 가득 찬다. 제때 관리해주지 않으면 퍼포스 서버가 불안정해질 수 있으므로 주기적으로 상태를 확인하며 관리해야 한다. 특히 오래된 리비전의 파일을 삭제하면 디스크 공간을 크게 확보할 수 있다.
퍼포스에는 이 기능을 담당하는 Obliterate Files 기능이 있는데, 문제는 수동으로만 동작한다는 점이다. 특정 리비전 범위를 지정해서 삭제할 수 있지만, 파일마다 일일이 처리해야 한다.
처음에는 파일을 하나씩 직접 처리했지만, 관리해야 할 파일이 많아지면서 자동으로 처리하는 배치 파일을 만들었다.
files_program.txt에 정리할 파일 목록을 넣어두면 가장 최근 5개 리비전만 남기고 나머지를 삭제한다.
Obliterate 명령은 한 번 실행하면 절대 되돌릴 수 없다. 배치 파일을 실행하기 전에 코드를 충분히 파악하고, 반드시 테스트 파일로 먼저 검증한 뒤에 실행하길 바란다.
@echo off
setlocal enabledelayedexpansion
rem 파일 목록이 저장된 파일 경로 설정
set FILE_LIST=files_program.txt
rem files.txt 파일을 한 줄씩 읽어서 처리한다.
for /f "delims=" %%a in (%FILE_LIST%) do (
set "TARGET_FILE=%%a"
rem echo !TARGET_FILE!
rem 가장 마지막 리비전 번호를 구한다.
for /f "tokens=3" %%b in ('p4 fstat -T headRev !TARGET_FILE! 2^>nul ^| find "headRev"') do set LATEST_REVISION=%%b
rem echo !LATEST_REVISION!
rem 마지막 5개 리비전이 5 초과일 때만 처리한다.
if !LATEST_REVISION! gtr 5 (
set /a LATEST_REVISION -= 5
rem echo !LATEST_REVISION!
rem obliterate 명령 실행
rem echo "p4 obliterate -T !TARGET_FILE!#1,#!LATEST_REVISION!"
p4 obliterate -y -T !TARGET_FILE!#1,#!LATEST_REVISION!
)
)
endlocal
files_program.txt 파일은 아래와 같이 작성한다.
//depot/Project/Server/TestServer1.pdb
//depot/Project/Server/TestServer2.pdb
//depot/Project/Server/TestServer3.pdb
//depot/Project/Server/TestServer4.pdb
댓글 남기기