유사하거나 한 파일에 다른 파일의 일부가 포함된 여러 파일 그룹을 찾을 수 있는 좋은 소프트웨어가 있습니까?
많은 파일이 섞여 있는 디렉토리가 있습니다. 이 파일들은 모두 버전이 다르고 파일 이름도 지저분합니다.
답변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