単一の単語を無視し、両方のディレクトリを再帰的に比較します。

単一の単語を無視し、両方のディレクトリを再帰的に比較します。

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

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

この場合、代替の長さは実際には元の長さ(「abcd」および「wxyz」)と同じですが、他の文字列の長さに対する一般的な解決策も興味深いでしょう。

どうすればいいですか?

ベストアンサー1

この問題を解決する1つの方法は、ファイルセットの1つを前処理することです(あなたの質問によると、すべてのフォルダ1のファイルにABCDまた、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

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

おすすめ記事