27 KiB
Sbackup
가볍고 효율적인 폴더 백업 도구로, CLI를 통해 백업 전략을 손쉽게 관리할 수 있습니다.
English | Deutsch | Espanol | Francais | Portugues | Pycckuu | 日本語 | 한국어 | 中文
소개
Sbackup는 CLI를 통해 백업 전략을 추가, 삭제, 조회할 수 있는 가벼운 폴더 백업 도구입니다. 폴더의 최종 수정 시간을 기준으로 백업이 필요한지 판단하여 데이터를 항상 최신 상태로 유지합니다.
주요 기능
- 증분 백업: 변경된 폴더만 백업하여 시간과 저장 공간을 절약
- 다중 포맷 지원: ZIP, tar, tar.gz, tar.bz2, tar.xz, tar.zst, 7z 등 7가지 압축 포맷을 전략별 및 전역 수준에서 독립 지정 가능
- SFTP 원격 백업: paramiko 기반, 비밀번호/SSH 개인키 인증 및 기본 개인키 자동 감지 지원
- WebDAV 원격 백업: 표준 라이브러리 urllib 기반, 추가 의존성 없이 견과云/NextCloud/시놀로지 지원
- S3 클라우드 저장소: minio 기반, 모든 S3 호환 저장소(AWS/MinIO/Alibaba Cloud OSS 등) 지원
- 다중 대상 병렬 백업: 로컬 + 여러 원격 대상에 동시에 백업, 상호 간섭 없음
- 백업 복원: 백업 파일에서 지정 디렉토리로 압축 해제 및 복원, 선택적 복원 지원
- 백업 정리: 오래된 백업 자동 삭제, 수량/시간/일별 보존 전략 지원
- 암호화 백업: 7z 포맷 비밀번호 암호화 + 전체 포맷 PBKDF2 암호화
- 예약 백업: 간격 기반 자동 실행, 실시간 파일 감시(watchdog) 지원
- 백업 이력: 각 백업의 시간, 크기, SHA256 체크섬 기록으로 추적 용이
- 감사 로그: 모든 백업/복원 작업의 감사 이벤트 기록
- Pre/Post Hook: 백업 전후 사용자 정의 명령 실행
- 설정 Profile: 다중 설정 프로필의 저장, 전환, 가져오기/내보내기 지원
- 크로스 아카이브 검색: 여러 백업 파일에서 일치하는 파일명 검색
- 데이터 무결성: SHA256 체크섬 생성 및 검증, Reed-Solomon 오류 정정 코드
- 설정 검증: 설정 매개변수 유효성 자동 검증, 변조 감지
- 작업 큐: 백업 작업 큐 관리, 추가/실행/취소 지원
- 압축 벤치마크: 다양한 포맷/레벨의 압축 성능 비교
- 디스크 공간 예측: 파일 유형별 백업 크기 추정, 대상 공간 확인
- 국제화: 한국어, 영어, 중국어, 프랑스어, 스페인어, 러시아어, 독일어, 일본어, 포르투갈어 9개 언어 지원
- Shell 자동 완성: bash/zsh/fish/powershell 자동 완성 지원
- 가볍고 효율적: 작은 용량, 빠른 시작 속도, 낮은 리소스 사용량
- 크로스 플랫폼 지원: Windows, macOS, Linux 지원
빠른 시작
설치
pip으로 설치
pip install sbackup-cli
설치 후 sbackup 명령을 사용합니다 (PyPI 패키지명: sbackup-cli, CLI 명령: sbackup).
소스에서 설치
git clone https://github.com/xiatianxuan/sbackup.git
cd sbackup
uv sync
사용 방법
기본 구문
uv run python main.py <command> [options]
사용 가능한 명령
| 명령 | 설명 |
|---|---|
add |
백업 전략 추가 |
rm / remove |
백업 전략 삭제 |
edit |
기존 백업 전략 편집 |
all |
모든 백업 전략 조회 |
save |
백업 실행 |
watch |
예약 백업 실행 |
restore |
백업 파일에서 복원 |
info |
백업 파일 상세 정보 조회 |
diff |
원본 디렉토리와 백업 간 차이 비교 |
verify |
백업 파일 무결성 검증 |
search |
백업 내 파일 검색 |
xsearch |
여러 백업 아카이브에서 검색 |
versions |
백업 버전 이력 조회 |
sftp |
SFTP 원격 백업 관리 |
webdav |
WebDAV 원격 백업 관리 |
remote |
원격 파일 관리 (list/rm) |
task |
백업 작업 큐 관리 |
audit |
감사 로그 조회 |
hooks |
Pre/Post Hook 수동 실행 |
profile |
설정 Profile 관리 |
rotate |
백업 로테이션 정리 |
clean |
오래된 백업 정리 |
diskcheck |
디스크 공간 예측 |
benchmark |
압축 포맷 벤치마크 |
integrity |
백업 디렉토리 무결성 검증 |
dry-run |
백업 파일 선택 미리보기 |
export / import |
백업 전략 내보내기/가져오기 |
ignore |
.sbackupignore 파일 생성 |
schedule |
예약 스케줄 설정 내보내기 |
webhook |
Webhook 프리셋 설정 |
config |
암호화/검증 설정 |
report |
백업 보고서 생성 |
completion |
Shell 자동 완성 스크립트 생성 |
wizard |
대화형 설정 마법사 |
status |
백업 상태 대시보드 |
version |
버전 정보 조회 |
help |
도움말 조회 |
전역 매개변수
| 매개변수 | 설명 |
|---|---|
--lang zh_CN / en_US / fr_FR / es_ES / ru_RU / de_DE / ja_JP / pt_BR / ko_KR |
인터페이스 언어 설정 (config.json에 영구 저장) |
--format zip / tar / tar.gz / tar.bz2 / tar.xz / tar.zst / 7z |
압축 포맷 설정 (config.json에 영구 저장) |
--debug |
디버그 로그 활성화 |
백업 전략 추가
uv run python main.py add <source> <dest> [-i ignore_patterns]
매개변수 설명:
- source: 백업할 원본 폴더 경로
- dest: 백업 파일 저장 대상 경로
- -i, --ignore: 무시할 파일 또는 폴더 이름, 쉼표로 구분 (기본값:
.git,__pycache__) - --format: 항목별 압축 포맷 (해당 백업 전략에만 적용, 미지정 시 전역 기본값 사용):
zip/tar/tar.gz/tar.bz2/tar.xz/tar.zst/7z
예시:
# 전역 기본 포맷으로 전략 추가
uv run python main.py add F:/my_folder F:/backup -i node_modules,.git
# 해당 전략에 tar.gz 포맷 지정 (이 폴더 백업 시 항상 tar.gz 사용)
uv run python main.py add F:/my_folder F:/backup --format tar.gz
# 7z 포맷 지정 (해당 폴더만)
uv run python main.py add F:/my_folder F:/backup --format 7z
백업 전략 삭제
uv run python main.py rm <path>
매개변수 설명:
- path: 백업 전략을 삭제할 원본 폴더 경로
예시:
uv run python main.py rm F:/my_folder
모든 백업 전략 조회
uv run python main.py all
현재 설정된 모든 백업 전략을 표시합니다.
백업 실행
# 기본 포맷(ZIP) 사용
uv run python main.py save
# tar.gz 포맷 사용
uv run python main.py --format tar.gz save
# 최근 5개 백업 파일 유지, 오래된 파일 자동 정리
uv run python main.py save --keep 5
# 7z 포맷으로 암호화
uv run python main.py --format 7z save --password mysecret
# 영어 인터페이스 + tar.xz 포맷
uv run python main.py --lang en_US --format tar.xz save
save 명령 매개변수:
| 매개변수 | 기본값 | 설명 |
|---|---|---|
--keep N |
0 |
최근 N개 백업 파일 유지, 0이면 정리 안 함 |
--password PASSWORD |
"" |
암호화 비밀번호 (7z 포맷만 지원) |
--sftp |
false |
백업 완료 후 SFTP 서버에 업로드 |
--webdav |
false |
백업 완료 후 WebDAV 서버에 업로드 |
백업 전략에 따라 변경된 폴더를 자동 백업합니다.
예약 백업
# 60분마다 백업 실행
uv run python main.py watch --interval 60
# 2시간마다 백업, 최근 10개 파일 유지
uv run python main.py watch --interval 120 --keep 10
# 예약 백업 + 7z 암호화
uv run python main.py --format 7z watch --interval 60 --password mysecret
watch 명령 매개변수:
| 매개변수 | 기본값 | 설명 |
|---|---|---|
--interval MINUTES |
60 |
백업 간격 (분) |
--keep N |
0 |
최근 N개 백업 파일 유지 |
--password PASSWORD |
"" |
암호화 비밀번호 (7z 포맷만 지원) |
--sftp |
false |
매 백업 후 SFTP 서버에 업로드 |
--webdav |
false |
매 백업 후 WebDAV 서버에 업로드 |
Ctrl+C를 눌러 예약 백업을 중지합니다.
백업 복원
uv run python main.py restore <backup_file> <target_dir>
매개변수 설명:
- backup_file: 백업 파일 경로 (.zip / .tar / .tar.gz / .tar.bz2 / .tar.xz / .tar.zst / .7z 지원)
- target_dir: 복원 대상 디렉토리
예시:
uv run python main.py restore F:/backup/my_folder.tar.gz F:/restored
uv run python main.py restore F:/backup/my_folder.7z F:/restored
uv run python main.py restore F:/backup/my_folder.tar.zst F:/restored
SFTP 원격 백업
# ============ 빠른 시작 (권장) ============
# 1. SFTP 설정 (SSH 개인키 자동 감지, 수동 지정 불필요)
sbackup sftp config --host 192.168.1.100 --user admin --remote-path /backups
# 2. 연결 테스트
sbackup sftp test
# 3. 백업 실행 및 업로드
sbackup save --sftp
# ============ 인증 방식 ============
# 방식 1: 개인키 자동 감지 (권장)
# 시스템이 자동으로 ~/.ssh/id_ed25519 -> id_rsa -> id_ecdsa 순서로 시도
sbackup sftp config --host 192.168.1.100 --user admin
# 방식 2: 비밀번호 인증
sbackup sftp config --host 192.168.1.100 --user admin --password secret
# 방식 3: 개인키 지정
sbackup sftp config --host 192.168.1.100 --user admin --key-file ~/.ssh/id_rsa
# 방식 4: 개인키 + 패스프레이즈 (대화형 입력)
sbackup sftp config --host 192.168.1.100 --user admin --key-file ~/.ssh/id_rsa
# 방식 5: 개인키 + 패스프레이즈 (명령줄 지정)
sbackup sftp config --host 192.168.1.100 --user admin --key-file ~/.ssh/id_rsa --key-passphrase mykeypass
# ============ 사용 시나리오 ============
# 시나리오 1: 일회성 백업 및 업로드
sbackup save --sftp
# 시나리오 2: 예약 백업 및 자동 업로드 (60분마다)
sbackup watch --interval 60 --sftp
# 시나리오 3: 특정 포맷 백업 + 업로드
sbackup --format tar.gz save --sftp
# 시나리오 4: 암호화 백업 + 업로드
sbackup --format 7z save --password mysecret --sftp
# 시나리오 5: 최근 5개 백업 유지 + 업로드
sbackup save --keep 5 --sftp
# ============ 고급 사용법 ============
# 대화형 설정 (단계별로 모든 매개변수 입력)
sbackup sftp config
# 비대화형 설정 (모든 매개변수를 명령줄에서 지정)
sbackup sftp config --host 192.168.1.100 --port 22 --user admin --password secret --remote-path /backups
# 연결 테스트 및 상세 로그 확인
sbackup --debug sftp test
sftp 하위 명령:
| 하위 명령 | 설명 | 예시 |
|---|---|---|
sftp config |
SFTP 연결 매개변수 설정 (host/port/user/password/key_file/key_passphrase/remote_path) | sbackup sftp config --host 192.168.1.100 --user admin |
sftp test |
SFTP 연결 가능 여부 테스트 | sbackup sftp test |
인증 방식:
| 방식 | 매개변수 | 설명 | 예시 |
|---|---|---|---|
| 자동 감지 | 인증 매개변수 미지정 | ~/.ssh/id_ed25519 -> id_rsa -> id_ecdsa 순서로 자동 시도 (권장) |
sbackup sftp config --host ... --user ... |
| 비밀번호 인증 | --password |
비밀번호로 직접 로그인 | sbackup sftp config --host ... --user ... --password secret |
| 개인키 인증 | --key-file |
지정된 SSH 개인키로 로그인 | sbackup sftp config --host ... --user ... --key-file ~/.ssh/id_rsa |
| 개인키+패스프레이즈 | --key-file + --key-passphrase |
개인키에 패스프레이즈가 있는 경우 사용 | sbackup sftp config --host ... --user ... --key-file ~/.ssh/id_rsa --key-passphrase mypass |
지원되는 개인키 형식: RSA, Ed25519, ECDSA.
크로스 플랫폼 경로 지원:
| 플랫폼 | 개인키 경로 예시 | 설명 |
|---|---|---|
| Linux/macOS | ~/.ssh/id_rsa |
/home/user/.ssh/id_rsa로 자동 확장 |
| Windows | ~/.ssh/id_rsa |
C:\Users\username\.ssh\id_rsa로 자동 확장 |
| 전 플랫폼 | 절대 경로 | 전체 경로를 직접 사용 |
SFTP 설정은 config.json의 sftp 필드에 저장되며, 명령줄 매개변수 또는 대화형 입력으로 설정할 수 있습니다.
버전 정보 조회
sbackup version
설정 파일
Sbackup는 config.json 파일을 통해 사용자 정의 설정을 지원합니다. 설정 파일은 프로젝트 루트 디렉토리에 배치해야 합니다.
설정 항목 설명
{
"compression_format": "ZIP",
"compression": {
"algorithm": "ZIP_DEFLATED",
"level": 6
},
"skip_patterns": [".git", "__pycache__"],
"data_file": "sbackup.json",
"lang": "zh_CN",
"password": "",
"sftp": {
"host": "",
"port": 22,
"user": "",
"password": "",
"key_file": "",
"key_passphrase": "",
"remote_path": "/",
"enabled": false
}
}
| 설정 항목 | 타입 | 기본값 | 설명 |
|---|---|---|---|
compression_format |
string | "ZIP" |
압축 포맷, 가능한 값: ZIP, TAR, TAR_GZ, TAR_BZ2, TAR_XZ, TAR_ZST, 7Z |
compression.algorithm |
string | "ZIP_DEFLATED" |
ZIP 압축 알고리즘, 가능한 값: ZIP_DEFLATED, ZIP_STORED, ZIP_BZIP2, ZIP_LZMA |
compression.level |
int | 6 |
압축 레벨, 범위 0-9 (0: 압축 없음, 9: 최대 압축) |
skip_patterns |
list | [".git", "__pycache__"] |
무시할 파일 또는 폴더 패턴 (fnmatch 와일드카드 및 경로 매칭 지원) |
data_file |
string | 플랫폼 기본 경로 | 백업 전략 데이터 파일 저장 경로 |
lang |
string | "zh_CN" |
인터페이스 언어, 가능한 값: zh_CN, en_US, fr_FR, es_ES, ru_RU, de_DE, ja_JP, pt_BR, ko_KR |
password |
string | "" |
7z 암호화 비밀번호 |
sftp.host |
string | "" |
SFTP 서버 주소 |
sftp.port |
int | 22 |
SFTP 포트 |
sftp.user |
string | "" |
SFTP 사용자 이름 |
sftp.password |
string | "" |
SFTP 비밀번호 (비밀번호 인증 시 사용) |
sftp.key_file |
string | "" |
SSH 개인키 파일 경로 (개인키 인증 시 사용, 권장) |
sftp.key_passphrase |
string | "" |
개인키 패스프레이즈 (있는 경우) |
sftp.remote_path |
string | "/" |
원격 대상 경로 |
sftp.enabled |
bool | false |
SFTP 활성화 여부 |
설정 예시
tar.bz2 포맷으로 고압축률 백업:
{
"compression_format": "TAR_BZ2",
"compression_level": 9,
"skip_patterns": [".git", "__pycache__", "node_modules", "*.log"],
"data_file": "backup_strategies.json",
"lang": "zh_CN"
}
압축 포맷 비교
| 포맷 | 확장자 | 압축률 | 속도 | 의존성 | 적합한 시나리오 |
|---|---|---|---|---|---|
| ZIP | .zip | 중간 | 빠름 | 표준 라이브러리 | 범용, Windows 호환성 최고 |
| tar | .tar | 없음 | 매우 빠름 | 표준 라이브러리 | 순수 아카이브, 외부 압축과 결합 |
| tar.gz | .tar.gz | 중간 | 빠름 | 표준 라이브러리 | Linux/macOS 범용 |
| tar.bz2 | .tar.bz2 | 높음 | 중간 | 표준 라이브러리 | 고압축률 아카이브 |
| tar.xz | .tar.xz | 최고 | 느림 | 표준 라이브러리 | 장기 아카이브, 공간 민감 |
| tar.zst | .tar.zst | 중상 | 매우 빠름 | zstandard | 현대 시나리오, 속도와 압축률 균형 |
| 7z | .7z | 매우 높음 | 느림 | py7zr | 최대 압축률, 암호화 지원 |
WebDAV 원격 백업
WebDAV는 HTTP 기반 파일 프로토콜로, 견과云, NextCloud, 시놀로지 등 주요 클라우드 스토리지를 지원합니다. Python 표준 라이브러리 urllib을 사용하여 추가 의존성이 없습니다.
# ============ 빠른 시작 ============
# 1. WebDAV 설정
sbackup webdav config --url https://dav.jianguoyun.com/dav/ --user user@example.com --password secret
# 2. 연결 테스트
sbackup webdav test
# 3. 백업 실행 및 업로드
sbackup save --webdav
# ============ 사용 시나리오 ============
# 시나리오 1: 일회성 백업 및 업로드
sbackup save --webdav
# 시나리오 2: 예약 백업 및 자동 업로드 (60분마다)
sbackup watch --interval 60 --webdav
# 시나리오 3: 원격 하위 디렉토리 지정
sbackup webdav config --url https://dav.jianguoyun.com/dav/ --user user@example.com --remote-path /backups/sbackup
# 시나리오 4: SFTP와 WebDAV에 동시 업로드
sbackup save --sftp --webdav
# ============ 일반 WebDAV 서비스 주소 ============
# 견과云: https://dav.jianguoyun.com/dav/
# NextCloud: https://your-server/remote.php/dav/files/username/
# 시놀로지: https://your-synology:5006/webdav/
webdav 하위 명령:
| 하위 명령 | 설명 | 예시 |
|---|---|---|
webdav config |
WebDAV 연결 매개변수 설정 (url/user/password/remote_path) | sbackup webdav config --url ... --user ... |
webdav test |
WebDAV 연결 가능 여부 테스트 | sbackup webdav test |
| 매개변수 | 기본값 | 설명 |
|---|---|---|
--url URL |
"" |
WebDAV 서버 주소 (예: https://dav.jianguoyun.com/dav/) |
--user USER |
"" |
WebDAV 사용자 이름 (일반적으로 이메일) |
--password PASS |
"" |
WebDAV 비밀번호 (견과云은 설정에서 앱 비밀번호를 생성해야 함) |
--remote-path PATH |
/ |
원격 대상 경로 |
구현 원리
Sbackup는 다음과 같은 방식으로 백업 기능을 구현합니다:
- 백업 전략 저장: 백업 전략은 JSON 파일에 저장되며, 폴더 경로, 최종 수정 시간, 대상 경로, 무시 패턴, 항목별 압축 포맷을 포함합니다.
- 증분 백업: 폴더의 최종 수정 시간을 비교하여 변경된 폴더만 백업합니다.
- 다중 포맷 압축: Python 내장
zipfile및tarfile모듈과zstandard,py7zr서드파티 라이브러리를 사용하여 7가지 압축 포맷을 지원합니다. - 항목별 포맷: 각 백업 전략은 독립적인 압축 포맷을 지정할 수 있습니다 (
add --format). 전역--format설정보다 우선하며, 미지정 시 전역 기본값을 사용합니다. - 백업 정리: 백업 성공 후 대상 디렉토리를 자동 스캔하여 수정 시간순으로 정렬하고, 보존 수량을 초과하는 오래된 파일을 삭제합니다.
- 암호화 백업: 7z 포맷은 LZMA2 암호화를 지원하며,
--password매개변수 또는config.json설정을 통해 구성합니다. - 예약 백업:
watch명령은 지정된 간격으로 루프에서 백업을 실행하며,Ctrl+C로 안전하게 종료합니다. - 백업 이력: 매 백업 후 타임스탬프, 파일 크기, 파일 수를 기록하며, 최근 100개 기록을 유지합니다.
- SFTP 원격 백업: paramiko 라이브러리 기반 SFTP 클라이언트를 구현하며, 연결 테스트, 원격 디렉토리 자동 생성, 진행 표시줄이 포함된 파일 업로드를 지원합니다.
데이터 파일 형식
{
"/path/to/source/folder": [
1719235200.0,
"/path/to/target/folder",
[".git", "__pycache__"],
""
],
"/path/to/another/folder": [
1719235200.0,
"/path/to/another/target",
[".git"],
"TAR_GZ"
],
"_history": [
{
"time": "2026-05-01T12:00:00",
"source": "/path/to/source/folder",
"size_mb": 12.5,
"files_count": 150
}
]
}
각 백업 전략 항목은 4요소 리스트입니다: [mtime, target, skip_patterns, compression_format]
| 필드 | 설명 |
|---|---|
mtime |
원본 폴더의 최종 수정 시간 (증분 백업 판단에 사용) |
target |
백업 파일 저장 대상 경로 |
skip_patterns |
무시할 파일/폴더 패턴 목록 |
compression_format |
항목별 압축 포맷 (빈 문자열이면 전역 기본값 사용) |
개발 가이드
테스트 실행
uv run coverage run -m unittest discover -s tests -t . && uv run coverage report -m
코드 구조
sbackup/
├── main.py # 프로그램 진입점
├── sbackup/
│ ├── __init__.py # 핵심 함수 내보내기
│ ├── __main__.py # python -m sbackup 진입점
│ ├── cli.py # CLI 매개변수 파싱 및 명령 분배 (30+ 명령)
│ ├── config.py # 설정 로드, 암호화, Webhook/SMTP 설정
│ ├── auto_save.py # BackupManager 핵심 엔진
│ ├── compression.py # 7가지 포맷 압축/해제 엔진
│ ├── i18n.py # 국제화 (9개 언어)
│ ├── sftp.py # SFTP 원격 백업 클라이언트 (paramiko)
│ ├── webdav.py # WebDAV 원격 백업 클라이언트 (무의존성)
│ ├── cloud_storage.py # S3 클라우드 저장소 클라이언트 (minio)
│ ├── multi_dest.py # 다중 대상 병렬 백업
│ ├── handlers.py # SFTP/WebDAV/Remote/Schedule 명령 처리
│ ├── hooks.py # Pre/Post Hook 실행
│ ├── audit.py # 감사 로그 시스템
│ ├── profile.py # 설정 Profile 관리
│ ├── selective.py # 선택적 복원
│ ├── cross_search.py # 크로스 아카이브 검색
│ ├── integrity.py # SHA256 체크섬
│ ├── rotation.py # 백업 로테이션 전략
│ ├── dryrun.py # Dry-run 미리보기
│ ├── diskcheck.py # 디스크 공간 예측
│ ├── task_queue.py # 작업 큐 시스템
│ ├── schema.py # 설정 검증기
│ ├── benchmark.py # 압축 벤치마크
│ ├── chunked_backup.py# 블록 단위 증분 백업
│ ├── dedup.py # 파일 단위 SHA256 중복 제거
│ ├── export.py # 메타데이터 내보내기 (CSV/JSON)
│ ├── monitor.py # watchdog 파일 시스템 감시
│ ├── lock.py # 크로스 플랫폼 프로세스 잠금
│ ├── retry.py # 지수 백오프 재시도
│ ├── ratelimiter.py # 토큰 버킷 속도 제한기
│ ├── keychain.py # 시스템 키체인 통합
│ ├── parity.py # Reed-Solomon 오류 정정 코드
│ ├── completion.py # Shell 자동 완성
│ ├── wizard.py # 대화형 설정 마법사
│ └── locales/ # 9개 언어 번역 파일
└── tests/
└── sbackup/
└── test_*.py # 30개 테스트 파일, 모든 모듈 커버
새 기능 추가
sbackup/디렉토리에 새 모듈 파일을 생성합니다sbackup/__init__.py에 새 기능의 함수를 임포트합니다run()함수에 새로운 CLI 명령 처리 로직을 추가합니다tests/디렉토리에 대응하는 테스트 파일을 추가합니다
자주 묻는 질문
Q: 백업 전략 파일을 실수로 삭제하면 어떻게 하나요?
A: 백업 전략은 데이터 파일에 저장됩니다. 실수로 삭제한 경우 add 명령을 다시 실행하여 백업 전략을 다시 추가할 수 있습니다.
Q: 이미 추가한 백업 전략을 어떻게 수정하나요?
A: sbackup edit 명령을 사용합니다: sbackup edit <source> --dest <new_dest> --ignore <patterns> --format <fmt>.
Q: 원격 백업을 지원하나요?
A: 지원합니다! 세 가지 원격 백업 방식을 제공합니다:
- SFTP:
sbackup sftp config로 설정,sbackup save --sftp로 업로드 - WebDAV:
sbackup webdav config로 설정,sbackup save --webdav로 업로드 (견과云/NextCloud/시놀로지 지원) - S3 클라우드 저장소:
config.json에서cloud필드 설정,sbackup save --cloud로 업로드 - 동시에 여러 방식 사용 가능:
sbackup save --sftp --webdav --cloud
Q: tar.gz와 ZIP의 차이는 무엇인가요?
A: tar.gz는 Linux/macOS에서 더 일반적이며 압축률이 약간 높습니다. ZIP은 Windows에서 더 범용적이며 호환성이 가장 좋습니다. tar.bz2와 tar.xz는 더 높은 압축률을 제공하지만 속도가 느립니다. tar.zst는 현대 알고리즘으로 속도가 매우 빠르면서 압축률도 양호합니다. 7z는 압축률이 가장 높고 암호화를 지원합니다.
Q: 백업을 어떻게 암호화하나요?
A: 7z 포맷을 사용하고 비밀번호를 설정합니다: uv run python main.py --format 7z save --password yourpassword. 비밀번호를 config.json의 password 필드에 작성할 수도 있습니다.
Q: 오래된 백업을 어떻게 자동 정리하나요?
A: --keep 매개변수를 사용합니다: uv run python main.py save --keep 5로 최근 5개 백업 파일만 유지합니다. 예약 백업 시에도同样 지원합니다: uv run python main.py watch --interval 60 --keep 10.
Q: 예약 백업을 어떻게 설정하나요?
A: watch 명령을 사용합니다: uv run python main.py watch --interval 60으로 60분마다 백업합니다. Ctrl+C로 중지합니다.
Q: 비밀번호 저장이 안전한가요?
A: config.json에 저장된 SFTP 비밀번호와 7z 암호화 비밀번호는 평문으로 저장됩니다. config.json 파일의 접근 권한을 신뢰할 수 있는 사용자로만 제한하세요 (예: chmod 600 config.json). 비밀번호가 포함된 config.json을 버전控制系统에 커밋하지 마세요.
기여 가이드
Issue와 Pull Request를 환영합니다!
- 이 저장소를 Fork합니다
- 기능 브랜치를 생성합니다 (
git checkout -b feature/AmazingFeature) - 변경사항을 커밋합니다 (
git commit -m 'Add some AmazingFeature') - 브랜치에 푸시합니다 (
git push origin feature/AmazingFeature) - Pull Request를 제출합니다
코드 스타일
이 프로젝트는 PEP 8 및 Google Python Style Guide를 따릅니다. 다음을 준수하세요:
- 타입 어노테이션 사용
- Google 스타일 docstrings 준수
- 모든 단위 테스트 통과
라이선스
이 프로젝트는 GNU GPL v3.0 라이선스를 따릅니다. 자세한 내용은 LICENSE 파일을 참조하세요.
저자
xiatianxuan (CodeSeed)
특별 감사
문의
질문이나 제안이 있으시면 이메일로 연락해 주세요: xiatianxuan2025@163.com
최종 업데이트: 2026년 6월 19일