遞歸比較兩個目錄,忽略單字

遞歸比較兩個目錄,忽略單字

我想遞歸地比較兩個目錄,忽略一個特定的字串替換。

例如,在一個目錄中,某些檔案包含字串“abcd”,而在另一個目錄中,“abcd”在這些相同檔案中已重新命名為“wxyz”。我想查看兩個目錄之間的所有差異,除了將“abcd”重命名為“wxyz”之外。

在這種情況下,替換長度實際上與原始長度(“abcd”和“wxyz”)相同,儘管針對不同字串長度的通用解決方案也很有趣。

我怎樣才能做到這一點?

答案1

解決這個問題的一種方法是預處理一組文件之一(您的問題表明所有folder1的文件可能有A B C D並且folder2的文件可能有西西

例如,find可以在一棵樹中搜尋文件,比如說資料夾1,並將其提供給腳本。

在腳本內部,您對輸入檔案執行替換並將結果通過管道傳遞給 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

可能有更簡潔的方法,但這清楚地顯示了您可以添加一些邏輯的地方。

相關內容