#!/usr/bin/python import getpass import os from ftplib import FTP blacklist = ['/stats','/sw/viterbi'] #don't search in these directories htmlfiles = [] #we'll store the list of html files here def fr(): oldtext = raw_input('Text to replace: ') newtext = raw_input('Replacement text: ') '''raw_input replaces escapte \ with '\\', ex. newline with '\\n' ''' '''to enter newline, when prompted enter '\'+'\'+'n' for new text''' oldtext = oldtext.replace('\\\\n','\n') oldtext = oldtext.replace('\\\\t','\t') newtext = newtext.replace('\\\\n','\n') newtext = newtext.replace('\\\\t','\t') uname = raw_input('FTP Login Name: ') passwd = getpass.getpass('Password: ') ftp = FTP('dicebeard.com',uname,passwd) print('List of detected HTML files') traverse(ftp, '') '''at this point htmlfiles is populated, time to start find/replace''' ftp.cwd('/') i = 1 nff = len(htmlfiles) for ff in htmlfiles: findandreplace(ftp, ff, oldtext, newtext) print(str(i*100/nff) + '% Done (' + str(i) + '/' + str(nff) + ' files)') i = i+1 print('Closing Connection') ftp.quit() print('Complete') def traverse(ftp, currentdir): ftp.cwd(currentdir) dlist = ftp.nlst() for item in dlist: newdir = currentdir + '/' + item if(newdir in blacklist): continue s = item.split('.') slen = len(s) if(slen == 1): traverse(ftp,newdir) #recursive search elif(slen == 2): if(s[1]=='html'): htmlfiles.append(currentdir + '/' + item) print(htmlfiles[-1]) def findandreplace(ftp, ff, oldtext, newtext): print('Working on ' + ff + '...') fp = open('temp.tmp','wb') ftp.retrbinary('RETR ' + ff, fp.write) fp.close(); fp = open('temp.tmp','r') fpnew = open('newtemp.tmp','w') while(1): line = fp.readline() if not line: break fpnew.write(line.replace(oldtext,newtext)) fp.close() fpnew.close() ftp.storbinary('STOR ' + ff, open('newtemp.tmp','rb')) os.remove('temp.tmp') os.remove('newtemp.tmp') print('Finished ' + ff + '...') if __name__=="__main__": fr()