是否有任何好的軟體可以找到相似的多個文件組,或者一個文件包含另一個文件的一部分?
我有一個目錄,裡面有很多文件混合在一起。這些文件中,都是不同版本的文件,而且文件名也很亂。
答案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