티스토리 뷰

인터넷에서 분할 압축된 파일들을 여러개 받으면 한꺼번에 풀어야되는데 선택하기가 여간 귀찮지 않아서... (첫번째 파일만 골라서 선택해야 되니) 간단하게 자동으로 압축을 풀어주는 파이썬 스크립트를 만들었다. (근데 분할압축이 아닌 한 파일은... 미안하지만 압축 해제 대상이 아니다)

이 스크립트를 사용하려면 7-zip이 있어야 하는데, 7-zip 커맨드라인 툴이 상당히 편하다. 예전에 압축 스크립트를 만들다 tar 커맨드라인 툴이 필요했는데, gnuwin32의 tar가 쵸큼 복잡해서 애로사항이 꽃피었었다;;; 그런데 7-zip을 한번 써보니까 그제서야 키보드를 내려놓을 수 있었던 일이...

파라매터로 사용되는 글로벌 변수들을 설명하자면...

testmode = False
testmode에서는 실제 압축을 안풀고 그냥 테스트만 한다

extractor = '"C:\\Program Files\\7-Zip\\7z.exe"' 
여기에다가는 7-zip 경로를 써준다

source = 'F:\\news_downloads\\korea.binaries.warez' 
이건 압축 파일들이 모여있는 폴더

output = 'g:\\tmp'
이건 아웃풋 폴더

그리고 요건 스크립트

import os

testmode = False

extractor = '"C:\\Program Files\\7-Zip\\7z.exe"'

source = 'F:\\news_downloads\\korea.binaries.warez'
output = 'g:\\tmp'

def count_like(list, s):
count = 0

for el in list:
idx = 0

try:
idx = el.index(s)
except:
idx = -1
pass

if idx == 0:
count += 1

return count

def run_extract(archive_file, output):
arg = 'e %s -o%s -r' % (archive_file, output) # filename, output

command = extractor + ' ' + arg

print 'run extract command: %s' % (command)

if testmode == False:
ret = os.system(command)

if ret == 0:
print 'succeed'
else:
print 'error: ', ret

if __name__ == '__main__':
os.chdir(source)

file_list = os.listdir('')
archive_list = []
first_archive_list = []

# get rars
for f in file_list:
if f.endswith('.rar'):
archive_list.append(f)

# filtering
for f in archive_list:
fname = f[:f.rfind('.')]

if f.endswith('.rar') and count_like(file_list, fname) > 1: # if file name (exclude extension) of f occurs several times in archive list, it could be .rar, .r00, .r01.
first_archive_list.append(f)
elif f.endswith('.part01.rar') or f.endswith('.part001.rar'): # or if the file ends with 'part01.rar', it is first archive file
first_archive_list.append(f)

print 'found first archives: ', first_archive_list

# extract
for f in first_archive_list:
run_extract(f, output)



댓글
댓글쓰기 폼