
我想遞歸地比較兩個目錄,忽略一個特定的字串替換。
例如,在一個目錄中,某些檔案包含字串“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
可能有更簡潔的方法,但這清楚地顯示了您可以添加一些邏輯的地方。