50 lines
1.6 KiB
Python
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:])
|