비슷한 문서를 찾아주는 앱이 있나요?

비슷한 문서를 찾아주는 앱이 있나요?

유사하거나 한 파일에 다른 파일의 일부가 포함된 여러 파일 그룹을 찾을 수 있는 좋은 소프트웨어가 있습니까?

많은 파일이 섞여 있는 디렉토리가 있습니다. 이 파일들은 모두 버전이 다르고 파일 이름도 지저분합니다.

답변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

관련 정보