#!/usr/bin/env python # Neil Schemenauer # Placed in the public domain. import sys import os import tempfile import subprocess import shutil FORMATS = [('.tar.gz', 'tar zxf'), ('.tgz', 'tar zxf'), ('.tar.bz2', 'tar jxf'), ('.tar', 'tar xf'), ('.zip', 'unzip -q'), ('.ZIP', 'unzip -q'), ('.rar', 'unrar x'), ('.RAR', 'unrar x'), ] def main(): for filename in sys.argv[1:]: for suffix, cmd in FORMATS: if filename.endswith(suffix): break else: raise SystemExit("Don't know how to unpack %r" % filename) tempdirname = tempfile.mkdtemp(dir='.') filename = os.path.abspath(filename) os.chdir(tempdirname) rv = subprocess.call(cmd.split() + [filename]) if rv != 0: shutil.rmtree(tempdirname) raise SystemExit('command %r failed (status %s)' % (cmd, rv)) os.chdir('..') filenames = os.listdir(tempdirname) if len(filenames) == 1: targetname = filenames[0] sourcename = os.path.join(tempdirname, targetname) else: sourcename = tempdirname targetname = os.path.basename(filename[:-len(suffix)]) if os.path.exists(targetname): shutil.rmtree(tempdirname) print "%r exists, not unpacking %r " % \ (targetname, filename) else: os.rename(sourcename, targetname) if os.path.exists(tempdirname): os.rmdir(tempdirname) print 'unpacked %r to %r' % (filename, targetname) if __name__ == '__main__': main()