DIFF(1) | GNU Tools | 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일
1993-09-22 | GNU Tools |