simVault

G
포스트
서재

[linux] 이걸로 끝내자, 리눅스 diff 사용법

11/10/2024, 10:53:52 AM (수정: 11/10/2024, 10:57:00 AM)
linux

리눅스의 diff 명령어는 어떤 파일간 차이를 알고 싶을 때 사용할 수 있습니다.

diff [옵션] [파일1] [파일2]

diff로 파일간 차이점 비교

우선 테스트를 위해 비교할 두 개의 파일을 만들었습니다.

test.txt

a b c d e f

test2.txt

a bb C d eee f G

위 두 파일은 2번째 행이 서로 다릅니다.

아래 명령어로 두 파일을 비교해보겠습니다.

diff test.txt test2.txt

결과는 다음과 같이 출력됩니다.

2,3c2,3 < b < c --- > bb > C 5c5 < e --- > eee 6a7 > G

이제 여기서 해석이 중요합니다.

  • 2,3c2,3은 첫 번째 파일의 2, 3행이 두 번째 파일의 2, 3행으로 변경(c)되었다는 뜻입니다.
  • 5c5는 첫 번째 파일의 5행이 두 번째 파일의 5행으로 변경(c)되었다는 뜻입니다.
  • 6a7는 두 번째 파일의 7번째 줄에 새로운 줄이 추가(a)되었다는 뜻입니다.

diff의 다양한 옵션들

diff 명령어에는 다양한 옵션이 있습니다. 옵션을 추가하였을 때 어떻게 출력되는지 같이 확인해보시죠.

  • -c: 변경된 행 전후의 문맥(context)을 포함하여 차이점을 보여줍니다. 기본적으로 3줄의 문맥을 표시하며, 줄수를 변경할 수도 있습니다.

    diff -c test.txt test2.txt
    *** test.txt Sun Nov 10 19:30:32 2024 --- test2.txt Sun Nov 10 19:30:59 2024 *************** *** 1,6 **** a ! b ! c d ! e f --- 1,7 ---- a ! bb ! C d ! eee f + G
  • -u: 유니파이드(unified) 형식으로 차이점을 보여줍니다. 문맥 모드보다 더 간결하여, Git 등에서 많이 사용하는 방식입니다.

    diff -u test.txt test2.txt
    --- test.txt 2024-11-10 19:30:32 +++ test2.txt 2024-11-10 19:30:59 @@ -1,6 +1,7 @@ a -b -c +bb +C d -e +eee f +G
  • -i: 대소문자를 무시(ignore case)하고 비교합니다.

    diff -i test.txt test2.txt
    2c2 < b --- > bb 5c5 < e --- > eee 6a7 > G
  • -w: 모든 공백을 무시(ignore white space)하고 비교합니다. 코드에서 공백이나 들여쓰기가 달라도 실제 내용만 비교할 때 유용합니다.

    diff -w test.txt test2.txt
    2,3c2,3 < b < c --- > bb > C 5c5 < e --- > eee 6a7 > G
  • -r: 디렉터리 비교시 하위 디렉터리까지 재귀적(recursive)으로 비교합니다.

디렉터리 간 비교

이번에는 -r 옵션을 활용하여 디렉터리 간 파일들의 diff를 확인해보도록 하겠습니다.

테스트를 위해 test-dir, test-dir2를 만들고 각각 README.md와 test.txt 파일들을 생성해주었습니다. 내용은 조금씩 다르게 넣어줬습니다.

diff test-dir/ test-dir2/
diff --color test-dir/README.md test-dir2/README.md 1c1 < 1 --- > 11 3c3,4 < 3 --- > 33 > diff --color test-dir/test.txt test-dir2/test.txt 2c2 < b --- > bbb