DIFF(1)

이름
diff - 두 파일의 차이점을 비교한다.

사용법
diff [options] from-file to-file

설명
diff는두개의 파일을 비교하여 그 차이점을 출력한다. 가장 단순한 경우에 diff 는 from-file 과 to-file 두 파일의 내용을 비교한다. 파일명 대신에 - 를 써 넣으면, 표준 입력을 파일대신 사용한다. 특별한 경우로, diff - - 는 표준입력 자기 자신을 비교한다. from-file 이 디렉토리, to-file 은 파일일 때 diff 는 to-file 과 from-file 디렉토리 안에 있는 to-file 과 같은 이름의 파일을 찾아 비교한다. 반대의 경우도 마찬가지이다. 이때, - 와는 비교할 수 없다. from-file 과 to-file 이 모두 디렉토리라면, diff 는 알파벳 순서로 두 디렉토리 안의 상응하는 파일을 비교한다. 이때 -r 이나 --recursive 옵션이 주어지지 않으면 재귀적으로(아래 디렉토리에 대해 다시 명령 적용) 동작하지 않는다. diff 는 파일인 것처럼 디렉토리 내에 포함된 내용 자체를 비교하지는 않는다. 표준 입력은 이름이 없고, ``같은 이름을 가진 파일''의 개념을 적용할 수 없기 때문에 정확히 지정된 파일 이름으로는 사용할 수 없다. diff 옵션들은 - 로 시작된다. 그래서 보통 from-file 과 to-file 은 - 로 시작하지 않는다. 하지만, -- 을 인자로 사용했을 경우, 다른 인자들은 - 로 시작하더라도 파일 이름으로 취급된다.

  옵션
아래는 GNU diff 에서 쓰이는 모든 옵션들의 요약이다. 대부분의 옵션은 같은 기능을 하는 두 개의 이름을 갖는다. 하나는 - 가 앞에 오는 단일 문자이고, 다른 하나는 -- 이 앞에 오는 긴 이름이다. 부가적인 인자를 받지 않는 복수의 단일 문자 옵션은 단일 명령 옵션에 결합될 수 있다. -ac 는 -a -c 와 같다. 긴 이름의 옵션은 그 이름의 특정 부분만으로 줄여 쓸 수 있다. 대괄호 ([ and ]) 는 옵션이 부가적인 인자를 가질 수도 있다는 것을 의미한다.

-lines
    문맥을 lines 줄 만큼 보여준다. (여기서 lines 는 정수이다.) 이 옵션에서는 특별히 출력 형태를 지정하지 않는다. 이 옵션은 -c 혹은 -u 과 같이 사용하지 않으면 아무런 효과가 없다. 이 옵션은 일반적으로 잘 쓰이지 않는 옵션이다. patch 가 제대로 동작하기 위해서는 적어도 두 줄 이상의 문맥이 필요하다.

-a  텍스트 형태의 파일이 아니더라도, 텍스트 형태의 파일로 인식하고 두 파일을 줄단위로 비교한다.

-b  공백 문자의 양의 차이는 무시한다.

-B  빈 줄의 추가나 삭제는 무시한다.

--brief
    정확한 차이점을 비교하는 것이 아니라, 단순히 두 파일이 다른가만 비교한다.

-c  context 출력 형식을 사용한다.

-C lines

--context[=lines]
    context 출력 형태를 사용해서 lines 줄을 보여준다. 만약 lines 가 지정되지 않으면, 세 줄을 보여준다. patch 가 제대로 동작하기 위해서는 일반적으로 최소한 두 줄의 문맥이 필요하다.

--changed-group-format=format
    if-then-else 형식에서 두 파일 사이에 다른 줄을 포함하는 문단을 보여줄 때, format 형식을 사용한다.

-d  아주 조그마한 변화라도 찾도록 검색 알고리즘을 바꾼다. 이 옵션은 diff 수행 속도를 아주 느리게 한다.

-D name
    선처리기 매크로 name 을 이용해서, 합쳐진 if-then-else 형식 출력을 만든다.

-e

--ed
    적절한 ed 스크립트 출력을 만든다.

--exclude=pattern
    디렉토리를 비교할 때, 파일과 하위 디렉토리의 basename이 pattern 과 일치하면 무시한다.

--exclude-from=file
    디렉토리를 비교할 때, 파일과 하위 디렉토리의 basename이 file 에 있는 어떤 패턴과 일치하면 무시한다.

--expand-tabs
    입력 파일들의 탭 정렬을 유지하기 위해, 출력에서 탭(tab)을 공백문자로 확장시킨다.

-f  ed 스크립트와 비슷하게 출력한다. 하지만, 파일에 나타난 순서대로 차이점을 나타낸다.

-F regexp
    context와 unified 형식에서, 차이가 있는 각각의 문단에 대해 regexp 와 일치하는 앞에 나오는 몇몇 줄의 내용을 보여준다.

--forward-ed
    ed 스크립트와 비슷하게 출력한다. 하지만, 파일에 나타난 순서대로 차이점을 나타낸다.

-h  현재 이 옵션은 쓰이지 않는다. 단지 유닉스 호환성을 유지하기 사용된다.

-H  작은 차이점들이 많은 큰 파일을 빠르게 처리하기 위해 사용된다.

--horizon-lines=lines
    일반 접두사(common prefix)의 마지막 lines 줄과 일반 접미사(common suffix)의 처음 lines 줄을 제외하지 않는다.

-i  대소문자를 구분하지 않는다. 대문자와 소문자를 같게 취급한다.

-I regexp
    regexp 에 맞는 줄의 삽입 혹은 삭제에 대한 변화를 무시한다.

--ifdef=name
    선처리기 매크로 name 을 이용해서, 합쳐진 if-then-else 형식으로 출력한다.

--ignore-all-space
    행을 비교할 때 공백 문자를 무시한다.

--ignore-blank-lines
    빈 줄의 추가나 삭제는 무시한다.

--ignore-case
    대소문자를 구분하지 않는다. 대문자와 소문자를 같이 취급한다.

--ignore-matching-lines=regexp
    regexp 에 맞는 줄의 삽입 혹은 삭제에 대한 변화를 무시한다.

--ignore-space-change
    공백 문자의 차이는 무시한다.

--initial-tab
    일반 형태나 context 형태의 출력에서 각 줄의 텍스트 앞에 공백 문자 대신 탭을 출력한다. 줄의 탭의 정렬이 자연스러워지게 된다.

-l  한 페이지씩 보기 위해 pr 을 통해 출력을 한다.

-L label

--label=label
    context 형식과 unified 형식 헤더에서 파일 이름 대신 지정된 라벨을 사용한다.

--left-column
    두행 출력(side by side) 형식에서 공통적으로 나오는 라인은 왼쪽 행에만 출력한다.

--line-format=format
    if-then-else 형식에서 모든 입력 줄을 출력하는데 format 을 사용한다.

--minimal
    약간의 차이라도 찾을 수 있도록 검색 알고리즘을 바꾼다. 이것은 diff 처리 속도를 느리게, 때론 아주 느리게 만든다.

-n  RCS 형식으로 출력한다. 각 명령이 줄의 수를 지정한다는 것만 제외하고는 -f 와 비슷하다.

-N

--new-file
    디렉토리 비교에서, 어떤 파일이 한 디렉토리에만 있다면 다른 디렉토리에는 비어었는 파일이 있는 것처럼 비교한다.

--new-group-format=format
    if-then-else 형식에서, 두번째 파일에서 나온 줄의 그룹을 출력할 때 format 을 사용한다.

--new-line-format=format
    if-then-else 형식에서, 두번째 파일에서 나온 줄을 출력할 때 format 을 사용한다.

--old-group-format=format
    if-then-else 형식에서, 첫번째 파일에서 나온 줄의 그룹을 출력할 때 format 을 사용한다.

--old-line-format=format
    if-then-else 형식에서, 첫번째 파일에서 나온 줄을 출력할 때 format 을 사용한다.

-p  차이가 있는 부분이 어느 C 함수 안에 있는지 보여준다.

-P  디렉토리를 비교할 때, 두 개의 디렉토리 중 두번째 디렉토리에만 파일이 존재한다면, 첫번째 디렉토리에는 사실 파일이 없지만 비어있는 파일이 있는 것처럼 비교한다.

--paginate
    페이지 단위로 출력하기 위해 pr 을 통해 출력한다.

-q  두 파일의 자세한 차이점이 비교하는 것이 아니라, 단순히 두 파일이 다른지만 알려준다.

-r  두 디렉토리를 비교할 때, 모든 하위 디렉토리는 재귀적으로(recursively) 비교한다.

--rcs
    RCS 형식으로 출력한다. 각 명령이 줄의 수를 지정한다는 것만 제외하고는 -f 와 비슷하다.

--recursive
    두 디렉토리를 비교할 때, 모든 하위 디렉토리는 재귀적으로(recursively) 비교한다.

--report-identical-files

-s  비교하는 두 파일이 같을 때만 출력한다.

-S file
    디렉토리를 비교할 때, file 에서부터 비교를 시작한다. 이 옵션은 보통 이전 비교에서 중간에 멈췄을 경우, 다시 시작할 때 사용하기에 적절하다.

--sdiff-merge-assist
    sdiff 를 위해 추가적인 정보를 출력한다. sdiff 가 diff 를 실행할 때 이 옵션을 이용한다. 이 옵션은 직접 사용자가 이용하는 옵션은 아니다.

--show-c-function
    차이가 있는 부분이 어느 C 함수 안에 있는지 보여준다.

--show-function-line=regexp
    context 형식과 unified 형식 출력에서, 각각의 차이가 있는 단락에 대해 regexp 과 일치하는 앞의 몇 줄을 보여준다.

--side-by-side
    side-by-side (두 열) 형식으로 출력한다.

--starting-file=file
    디렉토리를 비교할 때, file 에서부터 비교를 시작한다. 이 옵션은 보통 이전 비교에서 중간에 멈췄을 경우, 다시 시작할 때 사용하기에 적절하다.

--suppress-common-lines
    side-by-side 형식 출력에서 같은 내용의 줄은 출력하지 않는다.

-t  입력 파일의 탭 정렬을 유지하기 위해, 출력할 때 탭을 공백 문자(space)로 변환해서 출력한다.

-T  일반 형태나 context 형태의 출력에서 각 줄의 텍스트 앞에 공백 문자 대신 탭을 출력한다. 일반적으로 보이게 하기 위해 각 줄에서 탭들을 정렬한다.

--text
    텍스트 파일이 아닌 파일이더라도, 모든 파일을 텍스트 파일로 다루고, 줄 단위로 비교한다.

-u  unified 출력 형식을 사용한다.

--unchanged-group-format=format
    if-then-else 형식에서, 두 파일에 공통으로 들어있는 줄의 그룹을 출력하는데 format 을 사용한다.

--unchanged-line-format=format
    if-then-else 형식에서, 두 파일에 공통으로 들어있는 줄을 출력할 때 format 을 사용한다.

--unidirectional-new-file
    디렉토리를 비교할때, 두개의 디렉토리중 두번째 디렉토리에만 파일이 존재한다면, 첫번째 디렉토리에는 사실 파일이 없지만 빈 파일이 있는 것처럼 처리한다.

-U lines

--unified[=lines]
    unified 출력 형태를 사용해서, 문맥의 lines 줄을 보여준다. 만약 lines 가 지정되지 않으면, 세 줄을 보여준다. patch 가 제대로 동작하기 위해서는 일반적으로 최소한 두 줄 이상의 문맥이 필요하다.

-v

--version
    diff 의 버전 정보를 출력한다.

-w  각 줄을 비교할 때, 공백은 무시한다.

-W columns

--width=columns
    side-by-side 출력 형식에서, 한 열을 columns 만큼의 넓이로 출력한다.

-x pattern
    디렉토리들을 비교할 때, pattern 과 일치하는 basename을 갖는 파일과 하위 디렉토리를 무시한다.

-X file
    디렉토리들을 비교할 때, file 에 포함된 어떠한 형태와 일치하는 basename을 갖는 파일과 하위 디렉토리를 무시한다.

-y  side-by-side 출력 형식을 사용한다.

관련 항목
cmp(1), comm(1), diff3(1), ed(1), patch(1), pr(1), sdiff(1).

진단
종료시 0은 차이점이 없는 것이고, 1은 차이점이 있는 것, 2는 문제가 발생한 것을 의미한다.

번역
ASPLINUX <man@asp-linux.co.kr>, 2000년 7월 29일
한글 Manpage 프로젝트 (http://man.kldp.org), 2004년 3월 8일