[ create a new paste ] login | about

Link: http://codepad.org/ftWwtTGy    [ raw code | output | fork ]

akx - Python, pasted on Jun 11:
import os, sys, zipfile, optparse, zlib, fnmatch, time

optp=optparse.OptionParser(usage="%prog [options] <target-zip> <source-dir> [<source-dir...>]")
optp.add_option("-x", help="exclude mask", action="append", dest="exclude", default=[])
optp.add_option("-q", help="be quiet", action="store_true", dest="quiet", default=False)
optp.add_option("-e", help="omit empty directories", action="store_true", dest="omit_empty", default=False)
err=optp.error

options, args = optp.parse_args()

if len(args)<2:
	optp.print_usage()
	sys.exit(1)
	
zf=zipfile.ZipFile(args[0], "w")

def zfAddNullFile(zf, arcname, date_time, extattr=0):
	""" Adapted from the method in zipfile """
	arcname = os.path.normpath(os.path.splitdrive(arcname)[1])
	arcname = arcname.lstrip(os.sep + os.altsep)
	zinfo = zipfile.ZipInfo(arcname, date_time)
	zinfo.external_attr = extattr
	zinfo.compress_type = zf.compression
	zinfo.file_size = 0
	zinfo.flag_bits = 0x00
	zinfo.header_offset = zf.fp.tell()    # Start of header bytes
	zf._writecheck(zinfo)
	zf._didModify = True
	zinfo.CRC = CRC = zlib.crc32("")
	zinfo.compress_size = 0
	zinfo.file_size = 0
	zf.fp.write(zinfo.FileHeader())
	zf.filelist.append(zinfo)
	zf.NameToInfo[zinfo.filename] = zinfo
	
def printFilename(f, msg=None):
	if not options.quiet:
		if msg:
			print msg,
		
		try:
			print f
		except:
			print f.encode("charmap", "replace")

for sourceDir in args[1:]:
	try:
		sourceDir=sourceDir.decode("latin-1")
	except:
		pass
	for dp, dn, fn in os.walk(sourceDir):
		if fn:
			for f in fn:
				f=os.path.join(dp, f)
				ok=True
				for xmask in options.exclude:
					if fnmatch.fnmatch(f, xmask):
						ok=False
						break
				if ok:
					mtime=time.localtime(os.stat(f).st_mtime)
					printFilename(f)
					zfAddNullFile(zf, f, (mtime.tm_year, mtime.tm_mon, mtime.tm_mday, mtime.tm_hour, mtime.tm_min, mtime.tm_sec))
		elif not options.omit_empty:
			mtime=time.localtime(os.stat(dp).st_mtime)
			printFilename(dp, "(empty directory)")
			zfAddNullFile(zf, dp, (mtime.tm_year, mtime.tm_mon, mtime.tm_mday, mtime.tm_hour, mtime.tm_min, mtime.tm_sec), 16)
			


Output:
1
2
3
4
Traceback (most recent call last):
  Line 1, in <module>
    import os, sys, zipfile, optparse, zlib, fnmatch, time
ImportError: libz.so.1: cannot open shared object file: No such file or directory


Create a new paste based on this one


Comments: