import os import fnmatch import sys import shutil import re def usage(): print """ Usage: %s <work_dir> <search_regex> <replace_with> <glob_pattern> [backup] """ % (os.path.basename(sys.argv[0])) def find_replace(directory, search_pattern, replacement, glob_pattern, create_backup=False): for path, dirs, files in os.walk(os.path.abspath(directory)): for filename in fnmatch.filter(files, glob_pattern): pardir = os.path.normpath(os.path.join(path, '..')) pardir = os.path.split(pardir)[-1] print '[%s]' % pardir, filepath = os.path.join(path, filename) #backup orig file if create_backup: backup_path = filepath + '.bak' print 'DBG: creating backup', backup_path shutil.copyfile(filepath, backup_path) with open(filepath) as f: data = f.read() with open(filepath, "w") as f: print 'DBG: replacing in file', filepath # s = s.replace(search_pattern, replacement) data = re.sub(search_pattern, replacement, data) f.write(data) if __name__ == '__main__': if len(sys.argv) == 1: usage() sys.exit(-1) work_dir = sys.argv[1] search_regex = sys.argv[2] replacement = sys.argv[3] glob_pattern = sys.argv[4] dobackup = (len(sys.argv) > 4) and sys.argv[5].lower() in ['backup', '-b'] # findReplace(".", "<span[^>]*>", "<div>", "*.html") find_replace(work_dir, search_regex, replacement, glob_pattern, dobackup)