tar, gzip 압축풀기 예제

아래의 코드는 내가 만든 소스는 아니고 인터넷에서 찾아서 실행한 예제이다.
원래의 소스에서 일부는 수정하였고, 테스트를 위해 console 화면을 개발하였다.
소스를 다운받는 경우 gzip으로 압축된 경우가 많아서 tarfile로 gzip을 푸는 프로그램이 있으면 좋을것 같아 만들어 보았다.

tar_open : 압축된 파일을 현재 폴더에 푼다.
tar_info : 압축된 폴더에 있는 파일의 정보를 읽어 화면에 출력한다.
tar_add : tar 파일 형식으로 압축한다.(zip 과 같은 형태임)

알집같은 툴을 사용해서 풀수도 있지만 파이썬이 있으면 unix 용 압축프로그램은 왠만한건 다 풀 수 있는것 같아 별도 툴이 필요 없어보인다.


#How to extract an entire tar archive to the current working directory:

import tarfile
import sys

def tar_open(filename):
tar = tarfile.open(filename)
tar.extractall()
tar.close()

#How to create an uncompressed tar archive from a list of filenames:

def tar_add(targetfilename, *arglist):
tar = tarfile.open(targetfilename, "a")
for name in arglist:
   tar.add(name)
tar.close()

#How to read a gzip compressed tar archive and display some member information:

def tar_info(filename):
if tarfile.is_tarfile(filename):
tar=tarfile.open(filename)
else:
tar = tarfile.open(filename, "r:gz")
for tarinfo in tar:
   msg=tarinfo.name + "is" + str(tarinfo.size) + "bytes in size and is "
   if tarinfo.isreg():
       msg+="a regular file."
   elif tarinfo.isdir():
       msg+="a directory."
   else:
       msg+="something else."
   print(msg)
tar.close()

# python 3.3
if __name__=="__main__":
usage="""
Usage:
1.tar_open(ex.test.tar)
2.tar_add(ex. tar_add(test.tar,a.txt,b.txt,c.txt))
3.tar_info(tar or gzip only)(ex.test.tar.gz)
q.quit
"""
user_select=""
while user_select != "q":
print(usage)
user_select=input("Select:")
if user_select=="1":
filename=input("tar_open:")
tar_open(filename)
elif user_select=="2":
filename=input("tar_add:")
filelist=input("filelist(sep=',')")
files=filelist.split(sep=',')
for f in files:
tar_add(filename,f)
elif user_select=="3":
filename=input("tar_info:")
tar_info(filename)

댓글

이 블로그의 인기 게시물

dtsrun 실행하기

[MS SQL] SP수행 시간 및 작업빈도 확인

Slug가 뭘까?