1つの単語を無視して2つのディレクトリを再帰的に比較する

1つの単語を無視して2つのディレクトリを再帰的に比較する

特定の文字列の置換を無視して、2 つのディレクトリを再帰的に比較したいと思います。

たとえば、あるディレクトリの一部のファイルに文字列「abcd」が含まれていますが、他のディレクトリでは同じファイル内の「abcd」が「wxyz」に名前変更されています。「abcd」から「wxyz」への名前変更を除く、2 つのディレクトリ間のすべての違いを確認したいと思います。

この場合、置換の長さは実際には元の長さ ("abcd" と "wxyz") と同じですが、異なる文字列の長さに対する一般的なソリューションも興味深いでしょう。

どうすればこれを実現できるでしょうか?

答え1

これを実行する1つの方法は、ファイルセットの1つを前処理することです(質問では、フォルダ1のすべてのファイルにあいうえおそしてフォルダ2のファイルにはwxyz

例えば、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

もっと簡潔な方法があるかもしれませんが、これにより、ロジックを追加できる場所が明確に示されます。

関連情報