| """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 |
| |