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.