]> git.phdru.name Git - dotfiles.git/blob - bin/unzip.py
Initial import
[dotfiles.git] / bin / unzip.py
1 #! /usr/bin/env python
2 """Unzip with encoded filenames
3
4    Written by Oleg Broytman. Copyright (C) 2009, 2010 PhiloSoft Design.
5 """
6
7 import sys, os, time
8 from getopt import getopt, GetoptError
9 from zipfile import ZipFile
10 from m_lib.defenc import default_encoding
11
12 def usage():
13     sys.exit('Usage: %s file.zip' % sys.argv[0])
14
15 try:
16   options, arguments = getopt(sys.argv[1:], '')
17 except GetoptError:
18     usage()
19
20 if len(arguments) <> 1:
21     usage()
22
23 zf = ZipFile(arguments[0], 'r')
24 out = '.'
25
26 for zinfo in zf.infolist():
27     path = zinfo.filename
28     if not isinstance(path, unicode):
29         path = path.decode('cp866')
30     recoded_path = path.encode(default_encoding)
31     print recoded_path
32
33     if path.startswith('./'):
34         tgt = os.path.join(out, recoded_path[2:])
35     else:
36         tgt = os.path.join(out, recoded_path)
37
38     tgtdir = os.path.dirname(tgt)
39     if not os.path.exists(tgtdir):
40         os.makedirs(tgtdir)
41
42     if not tgt.endswith('/'):
43         fp = open(tgt, 'wb')
44         fp.write(zf.read(zinfo.filename))
45         fp.close()
46     dt = time.mktime(zinfo.date_time + (0, 0, -1))
47     os.utime(tgt, (dt, dt))
48 zf.close()