diff는 두 파일이 동일하더라도 서로 다른 것으로 보고합니다!

diff는 두 파일이 동일하더라도 서로 다른 것으로 보고합니다!

내 것과 동일해 보이는 두 개의 파일(후행 공백 및 개행 포함)이 있지만 diff에서는 여전히 서로 다르다고 말합니다. 나란히 비교해봐도 diff -y선이 똑같아 보이네요. diff의 출력은 전체 2개 파일입니다.

원인이 무엇인지 아시나요?

답변1

이상해요.. 한번 해보실 cmp래요? " " 옵션을 사용할 수도 있습니다 -b.

cmp 매뉴얼 페이지- 두 파일을 바이트 단위로 비교합니다.

이것은 Unix/Linux의 장점 중 하나입니다. 도구가 너무 많습니다 :)

답변2

노력하다:

diff file1 file2 | cat -t

-t옵션을 사용하면 cat특수 문자가 명확하게 표시됩니다. ^MCR의 경우, ^I탭의 경우.

매뉴얼 페이지(OS X)에서:

 -t      Display non-printing characters (see the -v option), and display tab characters as `^I'.

 -v      Display non-printing characters so they are visible.
         Control characters print as `^X' for control-X; the delete character
         (octal 0177) prints as `^?'.  Non-ASCII characters
         (with the high bit set) are printed as `M-' (for meta) followed by the
         character for the low 7 bits.

답변3

DOS와 UNIX 줄 끝 또는 이와 유사한 것으로 인해 차이가 발생할 수 있습니까?

당신이 그들이라면 어떨까요 hexdump? 이는 차이점을 더 명확하게 보여줄 수 있습니다. 예를 들면 다음과 같습니다.

hexdump -C file1 > file1.hex
hexdump -C file2 > file2.hex
diff file1.hex file2.hex

답변4

다른 답변은 충분히 완벽하지만 일종의 보이지 않는 차이점을 명시적으로 표시하는 방법을 제공합니다. 그러나 또 다른 옵션이 있습니다. 다소 중요하지 않은 이러한 차이점을 무시하는 것입니다. 어떤 경우에는 이러한 차이점을 아는 것이 유용하지 않습니다.

diff이 명령에는 이와 관련된 몇 가지 유용한 옵션이 있습니다.

--strip-trailing-cr
    strip trailing carriage return on input

-B, --ignore-blank-lines
    ignore changes where lines are all blank

-Z, --ignore-trailing-space
    ignore white space at line end

개인적으로 나는 이것이 유용하다고 생각한다 . 특히 --strip-trailing-cr대규모 프로젝트에서 -r(ie ) 옵션을 사용할 때나 --recursiveGit의core.autocrlf는 아니다 false(즉, 이다 true또는 input).

이러한 옵션 등에 대한 자세한 내용은 다음을 참조하세요.맨페이지(또는 통과 man diff).

노트:이러한 옵션을 사용하면 특히 파일/디렉터리가 큰 경우 결과 가져오기 성능에 영향을 미칠 수 있습니다. 내 경우 중 하나에서는 작동 시간 0.321s0.422s.

관련 정보