유사한 여러 파일 그룹을 찾거나 한 파일에 다른 파일의 일부가 포함되어 있는 좋은 소프트웨어가 있습니까?
많은 파일이 섞여 있는 디렉토리가 있습니다. 파일 중에 파일의 버전이 다르고 파일 이름이 엉망입니다.
답변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
이것이 기본 아이디어입니다.
아래 스크립트는 이 작업을 수행하고(현재 디렉터리에서 작동) diff가 두 파일 중 하나의 줄 수보다 작을 때마다 에코를 출력합니다. 이를 좀 더 조심스럽게 수정하여 두 파일의 줄 번호보다 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