Skip to content

Instantly share code, notes, and snippets.

@nergal
Created March 16, 2011 14:47
Show Gist options
  • Save nergal/872597 to your computer and use it in GitHub Desktop.
Save nergal/872597 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import os.path
from re import compile
from threading import Thread
class Worker(Thread):
def __init__(self, folder=".", verbose=True):
Thread.__init__(self)
self.folder = os.path.realpath(folder)
self.verbose = verbose
if self.verbose:
print "* New thread started for %s" % self.folder
def __del__(self):
if self.verbose:
print "* Thread ended %s" % self.folder
def run(self):
filelist = []
if not os.path.exists(self.folder):
return
try:
for filename in os.listdir(self.folder):
filename = os.path.join(self.folder, filename)
if os.path.isdir(filename):
Worker(folder=filename, verbose=self.verbose).start()
elif os.path.isfile(filename):
filelist.append(filename)
else:
raise IndexError("Not file nor folder")
except OSError:
print "OSError in %s" % filename
for filename in filelist:
if isScary(filename) or os.path.getsize(filename) == 0:
status = "[ OK ]"
else:
status = "[ FAIL ]"
print "* Suspicious file: %s" % filename
if self.verbose:
print "%s\t%s" % (filename, status)
def isScary(filename):
pattern = compile(r"[+\/0-9a-zA-Z]{500,}")
flag = True
for line in open(filename):
if pattern.search(line):
flag = False
return flag
if __name__ == "__main__":
if len(sys.argv) > 1:
argv = sys.argv[1]
else:
print "Usage: %s <path> [path2] [path3] ..." % sys.argv[0]
sys.exit()
for folder in sys.argv[1:]:
Worker(folder, verbose=True).start()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment