"""findgremlins - Search through a folder and subfolders for text files that have characters with bit 8 set, and print the filename and a bit of context. By Just, with a little glue by Jack""" import macfs import re import os import string import sys xpat = re.compile(r"[\200-\377]") def walk(top, recurse=1): if os.path.isdir(top): if recurse: for name in os.listdir(top): path = os.path.join(top, name) walk(path) else: cr, tp = macfs.FSSpec(top).GetCreatorType() if tp == 'TEXT' and top[-4:] <> ".hqx": data = open(top).read() badcount = 0 for ch in data[:256]: if ord(ch) == 0 or ord(ch) >= 0200: badcount = badcount + 1 if badcount > 16: print `top`, 'appears to be a binary file' return pos = 0 gotone = 0 while 1: m = xpat.search(data, pos) if m is None: break if not gotone: print `top` gotone = 1 [(i, j)] = m.regs print " ", string.replace(data[i-15:j+15], '\n', ' ') pos = j def main(): fss, ok = macfs.GetDirectory() if ok: walk(fss.as_pathname()) if __name__ == '__main__': main() sys.exit(1) # So we see the output