似たようなドキュメントを見つけるアプリがありますか?

似たようなドキュメントを見つけるアプリがありますか?

類似したファイルや、あるファイルに別のファイルの一部を含む複数のファイルグループを見つけるのに最適なソフトウェアがありますか?

多くのファイルが混在するディレクトリがあります。これらのファイルはすべてバージョンが異なり、ファイル名も乱雑です。

答え1

diffを使用して2つのファイルを比較する方法は、「wc -l」を使用して差分テキスト行数を計算し、比較された2つのファイルの実際の行数を計算します。違いの行がファイルの実際の行よりはるかに小さい場合は、ファイルがより似ていると言うのは安全です。少なくともこれは始まりです。

これはあなたがしたいことのアイデアです。ノート:これは、バイナリではなくファイルを扱っていると仮定します。

まず、各ファイルの行数を取得しようとします。

$ cat <file1> | wc -l
24
$ cat <file2> | wc -l
18
$ cat <file3> | wc -l
25
$ cat <file4> | wc -l
4

次に、ディレクトリに移動し、ファイルを「diff」と比較し、行の差を計算します。

$ diff <file1> <file2> | wc -l 
47
$ diff -ib <file1> <file3>  | wc -l
12
$ diff -ib <file1> <file4>  | wc -l
34

これが基本的なアイデアです。

以下のスクリプトはこれを実行し(現在のディレクトリで動作します)、違いが2つのファイルの行数より少ない場合はエコーします。これをより慎重に修正し、2つのファイルの行番号よりも10個以上少ないdiff行数だけが一致するものを見つけることができます。

for i in `ls`; do 
  for f in `ls`; do 
    if [ $i != $f ]; then 
      F_LINES=`cat $f | wc -l`; 
      I_LINES=`cat $i | wc -l`; 
      DIFF=`diff -ib $i $f | wc -l`;
      if [ $I_LINES -ge $DIFF ]; then 
        if [ $F_LINES -ge $DIFF ]; then 
          echo "SIMILAR: $i [lines: $I_LINES] - $f [lines: $F_LINES] - # lines different: $DIFF";
        fi;
      fi;
    fi;
  done; 
done

私が言ったように、このスクリプトは特別なものではなく、大幅に単純化することができますが、すぐに実行しました。次の結果が出力されます(上記のテストファイルの例を参照)。

SIMILAR: <file1> [lines: 24] - <file3> [lines: 25] - # lines different: 12
SIMILAR: <file3> [lines: 25] - <file1> [lines: 24] - # lines different: 12

関連情報