Files
cbrtocbz/cbrtocbz.py
2021-05-16 21:07:53 -05:00

50 lines
1.6 KiB
Python

import rarfile
import zipfile
import argparse
import tempfile
from sys import argv
from os import curdir, remove, walk
from os.path import splitext, join
#from glob import glob
from typing import Final
#optionally prints a message if the verbosity level is high enough
def vprint(text, level=0):
if vprint.verbosity >= level:
print(text)
vprint.verbosity = 0
def main(arguments):
parser = argparse.ArgumentParser()
parser.add_argument('-e', '--ext', type=str)
parser.add_argument('-p', '--path', type=str)
parser.add_argument('-d', '--delete', action='store_true')
parser.add_argument('-v', action='count')
parser.add_argument('files', nargs='+', type=str)
args = parser.parse_args(arguments)
files = args.files
ext = args.ext or 'cbz'
delete = args.delete
path: Final = args.path or curdir
for f in files:
with tempfile.TemporaryDirectory() as dir:
vprint('created temp dir ' + dir, 1)
with rarfile.RarFile(f, 'r') as rar:
vprint('extracting ' + f, 1)
rar.extractall(dir)
z_f = join(path, splitext(f)[0] + '.' + ext)
with zipfile.ZipFile(z_f, 'x') as zip:
for dirpath, dirs, files in walk(dir):
for file in files:
p = join(dirpath, file)
zip.write(p)
vprint('finished ' + z_f, 0)
if delete:
vprint('deleting ' + f, 0)
remove(f)
if __name__ == '__main__':
main(argv[1:])