2013年2月27日 星期三

File differencing/comparison on Linux

某天我為了比較RHEL6.1與6.3在我們lab裡開機訊息的不同,驚見Mars大師用了一套叫WinMerge的軟體,可以分析兩個檔案的相異之處,而且還可以分析、合併資料夾,而且是用GPL發布的喔,建議在windows底下可以用這款WinMerge來作差異辨識。

Fig1. WinMerge Logo。

Fig2. 比較的對象可以是兩個檔案,也可以是兩個資料夾。

Fig3. 如果某些檔案指出現在某個目錄,WinMerge用『僅左邊』『僅右邊』來表示,雖然我個人不習慣這樣表示,但左右兩邊的路徑表示算清楚,不至於搞混。

Fig4. RHEL6.3與RHEL6.1開機訊息的比較。WinMerge貼心的用灰色代表沒有重複過的字串,黃色區域代表有重複但是數值不同的相似區域。沒錯,開啟RHEL6.3的時候產生Call Trace,系統就開不起來了。

在Linux底下其實也有許多選擇,不過我還蠻推一個輕便的gtk小程式:Meld:

Fig5. 別小看Meld,他可是很神的!

Fig6. 與WinMerge不同,他利用漏斗表示某些內容是顯示在對比檔案的哪個區塊內。可以用滑鼠在左有兩邊檔案自由滾動。

Fig7. 用Meld的好處是我可以很輕易的以某一行訊息為基準,比較上下內容的差異性。對我只看log的需求來說,已經綽綽有餘了。

或許你有想過diff就是最傳統比較檔案異同的指令,不過我承認我從來沒看懂過,特別是當兩個檔案差距很大的時候。看看下圖各位看不看得懂:

Fig8. 遇到複雜一點的檔案,diff會讓人看得更困擾。

如果你不喜歡meld的話,可能需要參考這篇:WinMerge Alternatives.

Share