3 # print md5 checksum for files
10 usage: sum5 [-b] [-t] [-l] [-s bufsize] [file ...]
11 -b : read files in binary mode
12 -t : read files in text mode (default)
13 -l : print last pathname component only
14 -s bufsize: read buffer size (default %d)
15 file ... : files to sum; '-' or no files means stdin
25 FileType
= type(sys
.stdin
)
29 if files
and type(files
[-1]) == FileType
:
30 out
, files
= files
[-1], files
[:-1]
33 if len(files
) == 1 and type(files
[0]) != StringType
:
36 if type(f
) == StringType
:
38 sts
= printsumfp(sys
.stdin
, '<stdin>', out
) or sts
40 sts
= printsum(f
, out
) or sts
42 sts
= sum(f
, out
) or sts
45 def printsum(file, out
= sys
.stdout
):
47 fp
= open(file, rmode
)
49 sys
.stderr
.write('%s: Can\'t open: %s\n' % (file, msg
))
53 sts
= printsumfp(fp
, file, out
)
57 def printsumfp(fp
, file, out
= sys
.stdout
):
61 data
= fp
.read(bufsize
)
65 sys
.stderr
.write('%s: I/O error: %s\n' % (file, msg
))
67 out
.write('%s %s\n' % (hexify(m
.digest()), file))
73 res
= res
+ '%02x' % ord(c
)
76 def main(args
= sys
.argv
[1:], out
= sys
.stdout
):
77 global fnfilter
, rmode
, bufsize
80 opts
, args
= getopt
.getopt(args
, 'blts:')
81 except getopt
.error
, msg
:
82 sys
.stderr
.write('%s: %s\n%s' % (sys
.argv
[0], msg
, usage
))
86 fnfilter
= os
.path
.basename
92 bufsize
= string
.atoi(a
)
93 if not args
: args
= ['-']
96 if __name__
== '__main__' or __name__
== sys
.argv
[0]:
97 sys
.exit(main(sys
.argv
[1:], sys
.stdout
))