因爲項目版本之間的diff比較常用到,一般都查看改動過的腳本的diff,尤其是看其他人寫的代碼的時候。有些情況是一個目錄中有很多文件,到最後也不知道都改了哪裏了,於是需要逐個diff。
於是就誕生了這個腳本,這也是很久之前剛開始寫python的時候寫的比較簡陋的.
因爲linux執行ll命令,不同的機器可能顯示不太相同,可做相應調整,下面腳本適應的情況是:
total 12 drwxr-sr-x 3 work work 4096 Nov 22 16:43 bin drwxr-sr-x 2 work work 4096 Nov 8 10:30 conf -rw-rw-r-- 1 work work 64 Nov 22 15:27 test.pl
兩個腳本構成,主要是思路是檢測新代碼目錄中與舊目錄中腳本的diff,如果新目錄中有新出現的腳本也會發現。
運行腳本爲go_diff.py,調用腳本爲diff_work.py
go_diff.py
import os import sys if __name__ == '__main__': if len(sys.argv) == 4: print "yes,running" print "===============================================================" file1 = sys.argv[1] file2 = sys.argv[2] file3 = sys.argv[3] cmd = 'ls -l '+file1+' >temp_file1' os.system(cmd) cmd = 'ls -l '+file2+' >temp_file2' os.system(cmd) cmd = 'rm -rf '+file3+';mkdir '+file3 os.system(cmd) cmd = 'cat temp_file1 temp_file2|python diff_.py '+file1+' '+file2+' '+file3 os.system(cmd) cmd = 'rm temp_file1 temp_file2' os.system(cmd) print "===============================================================" # find_content(ff,int(sys.argv[1])) else: print "parameter num error ******" print "parameter1:content1" print "parameter2:content2" print "parameter3:dest_content"
diff_work.py
import sys import os def find_content(ff,file1,file2,file3): m = {} flag = 0 while True: ll = ff.readline().strip() if(ll): tokens = ll.split(' ') if(len(tokens) > 4 and tokens[0].find('drw')!=0): m[tokens[-1]] = 0 if(len(tokens) < 3 and flag!=0): break flag = 1 else: break n = {} while True: ll = ff.readline().strip() if(ll): tokens = ll.split(' ') if(len(tokens) > 4 and tokens[0].find('drw')!=0): n[tokens[-1]] = 0 else: break for x in m.keys(): if(n.has_key(x)): print x cmd = "diff %s/%s %s/%s > %s/%s" %(file1,x,file2,x,file3,x) os.system(cmd) else: print x cmd = 'cat %s/%s > %s/%s' %(file1,x,file3,x) os.system(cmd) if __name__ == '__main__': ff = sys.stdin if len(sys.argv) == 4: find_content(ff,sys.argv[1],sys.argv[2],sys.argv[3]) else: print "error"