特定の文字列置換を無視し、両方のディレクトリを再帰的に比較したいと思います。
たとえば、あるディレクトリの一部のファイルには「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
よりきれいな方法があるかもしれませんが、これはロジックを追加できる場所を明確に示しています。