DIFF 유틸리티는 2 개의 파일에 대해 작동합니다. 한 번에 두 개 이상의 파일을 비교하는 방법은 무엇입니까?


84

따라서 Diff 유틸리티는 2 개 파일에 대해 원하는대로 작동하지만 한 번에 2 개 이상의 파일, 한 번에 최대 10 개까지 비교해야하는 프로젝트가 있습니다. 이를 위해서는 모든 파일을 서로 나란히 배치해야합니다. 내 연구는 실제로 아무것도 밝혀지지 않았습니다. vimdiff는 한 번에 4 개를 비교할 수있는 능력으로 지금까지 최고인 것 같습니다.

내 질문 : 한 번에 2 개 이상의 파일을 비교하는 유틸리티가 있습니까? 아니면 여러 비교를 수행 할 수 있도록 diff / vimdiff를 해킹하는 방법이 있습니까? 비교할 파일은 비교적 짧기 때문에 너무 느리지 않아야합니다.

미리 감사드립니다!

답변:


111

Diffuse를 사용 하면 10 개의 파일을 나란히 표시하고 차이점을 강조 표시 할 수 있습니다 . 다음과 같이 명령 줄에서 모든 파일을 지정하기 만하면됩니다.

diffuse 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt 10.txt


1
와우 대단해! 늦게까지 답변 해 주셔서 감사합니다. 여전히 도움이 필요했습니다.
— Javed Ahamed

1
이런 종류의 비교를 무엇이라고합니까?
— leeand00 2010-04-21

4
환상적인 도구; 짜증나는 문제를 해결하는 데 도움을주었습니다. 나는 그것이 오래된 대답이라는 것을 알고 있지만 감사합니다!
— SeanKilleen 2010

천 번 감사합니다! 복사하여 붙여 넣은 파일의 작은 차이점을 찾는 데 많은 도움이되었습니다.
— Trass3r

1
나는 내 댓글 삭제 한 - @Gruber - 내가 나쁜 시간에 링크 히트해야
— combatc2

28

Vim은 이미이 작업을 수행 할 수 있습니다.

vim -d file1 file2 file3

그러나 일반적으로 4 개의 파일로 제한됩니다. 그러나 Vim의 소스에서 한 줄을 수정하여 변경할 수 있습니다. 상수 DB_COUNT는 비교 된 파일 의 최대 수를 정의 diff.c하며 버전 6.x 및 이전 버전 에서는 상단으로 , structs.h버전 7.0 이상에서는 약 2/3로 정의 됩니다.


vimdiff 또는 vim -d는 적어도 내 컴퓨터에서 한 번에 4 개의 파일 만 수행 할 수 있습니다. 누구든지 이것을 우회하는 방법을 알고 있습니까?
— Javed Ahamed

나는 질문에서 그것에 대한 언급을 알아 차리지 못했습니다. Vim 제한 변경에 대한 지침을 포함하도록 업데이트되었습니다.
— Noah Medling

헤이, 실제로 structs.h 또는 diff.c를 얻는 방법을 알고 있습니까? Win 또는 Linux에서 vim 소스 코드를 찾을 수 없습니다.
— Javed Ahamed

vim은 유용성을 제한하는 두 개 이상의 디렉토리에 대한 디렉토리 비교를 수행 할 수없는 것 같습니다. 추가 제한 사항은 파일을 서로 비교할 때 파일의 왼쪽 만 볼 수 있고 모든 것을 볼 수있는 스크롤 막대가 없다는 것입니다. 그리고 변경 사항을 앞뒤로 푸시하는 GUI 방법이 없습니다.
— Jereme Guenther

7

diff하나의 피연산자를 다른 모든 피연산자 --from-file와 --to-file비교하는 내장 옵션 및가 있습니다.

   --from-file=FILE1
          Compare FILE1 to all operands.  FILE1 can be a directory.

   --to-file=FILE2
          Compare all operands to FILE2.  FILE2 can be a directory.

실제 파일 경로 대신 프로세스 대체와 함께 작동하도록 할 수 있기를 바랍니다.
— Jan Kyu Peblik 19

1
@JanKyuPeblik zsh를 사용하는 경우 출력을 임시 파일에 쓰고
— Eric Freese

2

Checkout "Beyond Compare": http://www.scootersoftware.com/

파일의 전체 디렉토리를 비교할 수 있으며 Linux에서도 실행되는 것처럼 보입니다.


1
DIFF -r 또한 파일의 전체 디렉토리를 비교하지만, 오직 다른 디렉토리에있는 파일에 대해 하나의 driectory에서 파일을 비교
— reinierpost

6
Beyond Compare는 훌륭한 도구이며 병합 충돌을 해결하기 위해 항상 사용합니다. 그러나 두 파일을 서로 또는 공통 조상과 만 비교할 수 있기 때문에이 작업에 적합한 도구는 아닙니다.
— Superole

-1에 대해 미안하지만 이것은 많은 파일을 서로 비교하는 것입니다.
— Manohar Reddy Poreddy

1

하나의 파일을 기반으로 여러 diff를 실행하는 경우 for 루프가있는 스크립트를 작성하여 각 디렉터리를 실행하고 diff를 실행할 수 있습니다. 나란히 있지는 않지만 적어도 빠르게 비교할 수 있습니다. 도움이 되었기를 바랍니다.


예,하지만 예를 들어 3 개의 파일을 비교하는 경우 diff가 일치하는 위치를 확인하기 위해 재 배열하기 때문에 다른 2 개 파일과 모두 비교하기를 원할 것입니다.
— Javed Ahamed

이 명령은 스크립트에 도움이 될 수있는 diff3라는 명령을 찾았으며 아마도 3 개의 파일을 비교하는 유틸리티 일 것입니다. linux.about.com/library/cmd/blcmdl1_diff3.htm Windows 버전은 여기에서 찾을 수 있습니다. gnuwin32.sourceforge.net/packages/diffutils.htm
— Benjamin Neil

0

주요 질문에는 대답하지 않지만 Benjamin Neil이 제안한 것과 비슷한 것이지만 모든 파일을 비교 합니다.

파일 이름을 배열에 저장 한 다음 크기 2와 diff의 조합을 반복합니다 (또는 원하는대로 수행).

files=($(ls -d /path/of/files/some-prefix.*))     # Array of files to compare
max=${#files[@]}                                  # Take the length of that array
for ((idxA=0; idxA<max; idxA++)); do              # iterate idxA from 0 to length
  for ((idxB=idxA + 1; idxB<max; idxB++)); do     # iterate idxB + 1 from idxA to length
    echo "A: ${files[$idxA]}; B: ${files[$idxB]}" # Do whatever you're here for.
  done
done

@ charles-duffy 의 답변 에서 파생 : https://stackoverflow.com/a/46719215/1160428


0

이를 수행하는 간단한 좋은 방법이 있습니다 = GREP.

텍스트 크기에 따라 복사하여 붙여 넣거나 파일 입력을 grep 명령으로 리디렉션 할 수 있습니다. 역방향 검색을 위해 grep -vir / path를 만들거나 grep -ir / path를 만들면. 이것이 인증 시험을위한 나의 방식입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.