58 lines
1.2 KiB
Python
58 lines
1.2 KiB
Python
"""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 EasyDialogs
|
|
import MacOS
|
|
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 = MacOS.GetCreatorAndType(top)
|
|
if tp in ('TEXT', '\0\0\0\0') 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():
|
|
if sys.argv[1:]:
|
|
for pathname in sys.argv[1:]:
|
|
walk(pathname)
|
|
else:
|
|
pathname = EasyDialogs.AskFolder()
|
|
if pathname:
|
|
walk(pathname)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
|