Diff
遞歸地區分兩個目錄,忽略一個單詞
我想遞歸地區分兩個目錄,忽略一個特定的字元串替換。
例如,在一個目錄中,一些文件包含字元串“abcd”,而在另一個目錄中,“abcd”在這些相同文件中已重命名為“wxyz”。我想查看兩個目錄之間的所有差異,除了將“abcd”重命名為“wxyz”。
在這種情況下,替換長度實際上與原始長度相同(“abcd”和“wxyz”),儘管針對不同字元串長度的通用解決方案也很有趣。
我怎樣才能做到這一點?
一種解決方法是預處理一組文件中的一個(您的問題指出所有文件夾 1 的文件可能有abcd和文件夾 2 的文件可能有wxyz。
例如
find
,可以在樹中進行文件搜尋,比如folder1,並將其提供給腳本。在腳本中,您在輸入文件上執行替換並將結果通過管道傳輸到 diff,這會將其標準輸入與另一棵樹上的相應文件進行比較。
我假設您在兩棵樹上都有一組文件,如果不是這種情況,您可以添加程式碼來處理它(其中還有
diff
可能有幫助的標誌)。最低版本看起來像這樣(例如,您可以添加多個替換)。請注意,您還必須確保替換程式碼完成您需要做的事情,例如只更改單詞而不是子字元串)。
find folder1 -type f -printf "%P\n" | while read myfile do sed 's/abcd/wxyz/g' folder1/$myfile | diff -u folder2/$myfile - done
可能有更簡潔的方法,但這清楚地顯示了您可以添加一些邏輯的地方。