有沒有可以找類似文件的應用程式?

有沒有可以找類似文件的應用程式?

是否有任何好的軟體可以找到相似的多個文件組,或者一個文件包含另一個文件的一部分?

我有一個目錄,裡面有很多文件混合在一起。這些文件中,都是不同版本的文件,而且文件名也很亂。

答案1

如何使用 diff 比較兩個文件,使用「wc -l」計算差異文字的行數,然後計算兩個比較文件中的實際行數。如果差異行明顯小於檔案的實際行,那麼可以肯定地說這些檔案更相似。至少這是一個開始。

這是你要做的事情的想法。筆記這是假設您正在處理非二進位文件

首先,您想要取得每個檔案的行數:

$ 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

這就是基本的想法。

下面的腳本將為您執行此操作(在目前目錄上操作),並在差異小於任一文件中的行數時回顯。您可以將其修改為更加謹慎,僅查找比任一文件的行號少 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

相關內容