Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬(Python)으로 tar 아카이브를 만들고 파일을 추가하는 방법

tarfile 모듈로 디렉터리 전체를 tar.gz로 압축하기

파이썬에는 tar 아카이브를 다루기 위한 tarfile 모듈이 기본 내장되어 있습니다. 이 모듈과 os.walk를 함께 사용하면 특정 폴더의 구조를 재귀적으로 순회하면서 그 안의 모든 파일을 하나의 tar 아카이브에 담을 수 있습니다.

전체 코드 예제

import os
import tarfile

def tardir(path, tar_name):
    with tarfile.open(tar_name, "w:gz") as tar_handle:
        for root, dirs, files in os.walk(path):
            for file in files:
                tar_handle.add(os.path.join(root, file))

tardir('./my_folder', 'sample.tar.gz')

코드 설명

  • tarfile.open(tar_name, "w:gz") — 쓰기 모드("w")에 gzip 압축(":gz")을 적용해 새 아카이브 파일을 생성합니다.
  • os.walk(path) — 지정한 경로의 폴더 구조를 재귀적으로 탐색하며, 루트 경로·하위 폴더 목록·파일 목록을 차례로 반환합니다.
  • tar_handle.add(...)os.path.join으로 조합한 전체 경로의 파일을 아카이브에 하나씩 추가합니다.

with 문을 사용했기 때문에 블록이 종료되는 시점에 아카이브가 자동으로 안전하게 닫히므로, 별도로 close()를 호출할 필요가 없습니다. 위 코드를 실행하면 my_folder의 내용 전체가 sample.tar.gz라는 파일로 압축되어 현재 작업 디렉터리에 저장됩니다.

기존 tar 파일에 새 파일 추가하기

이미 만들어져 있는 tar 아카이브에 파일을 덧붙이려면 추가(append) 모드인 "a"를 사용합니다.

import tarfile

with tarfile.open('sample.tar', 'a') as tar:
    tar.add('new_file.txt')
    tar.add('another_log.log')

단, 추가 모드는 압축되지 않은 일반 .tar 파일에만 동작한다는 점에 유의하세요. gzip 등으로 압축된 .tar.gz 파일에는 파일을 직접 추가할 수 없으므로, 이 경우 기존 아카이브를 해제한 뒤 다시 묶거나 처음부터 새로 생성해야 합니다.

참고: tarfile에서 지원하는 주요 모드

모드설명
w압축 없이 일반 tar 파일 생성
w:gzgzip으로 압축 (.tar.gz / .tgz)
w:bz2bzip2로 압축 (.tar.bz2)
w:xzxz로 압축 (.tar.xz)
a기존 tar 파일에 파일 추가 (비압축 tar만 가능)