diff 명령

용도

텍스트 파일을 비교합니다.

구문

두 파일의 컨텐츠를 비교하는 경우

diff [ -c| -C 라인 | -D [ 문자열 ] | -e | -f | -n | -u | -U 라인 ] [ -b ] [ -i ] [ -t ] [ -w ] File1 File2

diff [ -h ] [ -b ] File1 File2

디렉토리의 컨텐츠를 정렬하고 서로 다른 파일을 비교하는 경우

diff [ -c | -C 라인 | -e | -f | -n | -u | -U 라인 ] [ -b ] [ -i ] [ -l ] [ -r ] [ -s ] [ -S 파일 ] [ -t ] [ -w ] Directory1 Directory2

diff [ -h ] [ -b ] Directory1 Directory2

설명

diff 명령은 텍스트 파일을 비교합니다. 단일 파일 또는 디렉토리의 컨텐츠를 비교할 수 있습니다.
참고: diff 명령은 텍스트 파일인 입력 파일에서만 작동합니다.

Directory1Directory2 매개변수가 지정되는 경우 diff 명령은 양 디렉토리에서 동일한 이름을 갖는 텍스트 파일을 비교합니다. 서로 다른 2진 파일, 공통 서브디렉토리, 한 디렉토리에만 존재하는 파일이 나열됩니다.

diff 명령을 일반 파일에 대해 실행할 때와 디렉토리 비교 시 서로 다른 텍스트 파일을 비교할 때, diff 명령은 파일들을 일치시키기 위해 어떤 행들을 변경해야 하는지를 말해줍니다. File1 또는 File2 매개변수가 디렉토리가 아닌 경우 어느 하나는 -(빼기 부호)로서 제공될 수 있으며, 이 경우 표준 입력이 사용됩니다. File1 매개변수가 디렉토리인 경우 해당 디렉토리에서 파일 이름이 File2 매개변수와 동일한 파일이 사용됩니다.

전형적인 출력에는 다음 양식의 행을 포함합니다.

Lines Affected in File1   Action        Lines Affected in File2
Number1                   a             Number2[,Number3]
Number1[,Number2]         d             Number3
Number1[,Number2]         c             Number3[,Number4] 

이 줄은 File1 File2 변환하는 하위 명령과 유사합니다 . 조치 문자 앞의 숫자는 File1과 관련되고, 그 뒤의 숫자는 File2와 관련됩니다. 따라서 ad를 바꾸고 오른쪽에서 왼쪽으로 읽으면 File2File1로 변환하는 방법을 지시할 수 있습니다. ed 명령에서와 같이, 동일한 쌍(Number1 = Number2)은 단일 숫자로 약어화됩니다.

이러한 각 줄 다음에 diff 명령은 첫 번째 파일에서 영향을 받는 모든 줄 앞에 <: (부호보다 작은 기호, 콜론)을 표시한 다음, 두 번째 파일에서 영향을 받는 모든 줄 앞에 > (부호보다 큰 기호)를 표시합니다.

0의 종료값은 차이점이 없음을 나타내고, 종료값 1은 차이점이 발견되었음을, 종료값 2는 오류를 나타냅니다.

참고: -c, -C, -D, -e, -f 또는 -n, -u, -U 플래그 중 둘 이상을 지정하면 명령줄의 마지막 플래그가 우선합니다. 시스템은 오류 메시지를 발행하지 않습니다.

플래그

항목 설명
-b 행의 끝에 있는 임의의 양의 공백을 하나의 줄 바꾸기 문자로 취급되게 하고(줄 바꾸기 문자 앞에 오는 공백 문자는 무시함) 줄 바꾸기 문자를 포함하지 않는 공백 문자의 다른 문자열이 동등하게 비교되도록 합니다.
-C 라인 Lines 변수에 지정된 값과 동일한 수의 복사된 컨텍스트 줄을 사용하여 diff 명령 비교를 생성합니다. -c 플래그는 출력을 약간 수정합니다. 출력은 관련 파일의 ID와 해당 파일의 작성일로 시작합니다. 각 변경 사항은 12개의 줄로 구분됩니다*(별표). File1 제거된 줄에는-(빼기 기호 )로 표시되고, File2 추가된 항목은+(더하기 기호). 한 파일에서 다른 파일로 변경된 줄은 두 파일 모두에!(느낌표)로 표시됩니다. 서로의 지정된 복사된 문맥 행 안에 있는 변경사항은 출력으로 함께 그룹화됩니다.
-c 세 줄의 복사된 컨텍스트와 다른 명령 비교를 생성합니다. -c 플래그는 출력을 약간 수정합니다. 출력은 관련 파일의 ID와 해당 파일의 작성일로 시작합니다. 각 변경 사항은 12개의 줄로 구분됩니다*(별표). File1 제거된 줄에는-(빼기 기호 )로 표시되고, File2 추가된 항목은+(더하기 기호). 한 파일에서 다른 파일로 변경된 줄은 두 파일 모두에!(느낌표)로 표시됩니다. 서로의 지정된 복사된 문맥 행 안에 있는 변경사항은 출력으로 함께 그룹화됩니다.
-D [ 문자열 ] diff 명령이 표준 출력에 File1File2의 병합된 버전을 작성하게 합니다. C 선행처리기 제어가 포함되므로 String을 정의하지 않은 결과의 비교는 File1 컴파일과 동일하며, String을 정의하면 File2가 작성됩니다.
-e ed 편집기에 사용하기에 적절한 양식으로 출력을 생성하여 File1 File2로 변환합니다. 이 플래그를 사용할 때 다음 쉘 프로그램이 여러 버전의 파일을 유지하는 데 도움이 될 수 있습니다. 조상 파일($1)과 버전 간 편집 스크립트 체인($2, $3, ...)만 있습니다 명령으로 만든 diff 준비해야 합니다. 최신 버전은 표준 출력에 다음과 같이 나타납니다.
(shift; cat $*; echo '1,$p') | ed - $1
-e 플래그가 디렉토리를 비교하는 데 사용될 때 추가 명령이 출력에 추가되므로, 결과는 두 디렉토리에 공통인 텍스트 파일을 Directory1에서의 상태에서 Directory2에서의 상태로 변환하기 위한 쉘 스크립트입니다.
참고: -e 또는 -f 플래그로 생성된 스크립트를 편집할 때는 단일 . (마침표)로 구성되는 행을 작성할 수 없습니다.
-f ed 편집기에 사용하기에는 부적절한 양식으로 출력을 생성하며 File1에서 File2까지 -e 플래그에서 만든 것과 반대 순서로 변환해야 하는 수정 사항을 표시합니다.
-h 변경된 섹션이 짧고 잘 구분된 경우 더 빠를 수 있는 대체 비교를 수행합니다. -h 플래그는 임의 길이의 파일에서 작동합니다. -c, -C, -D, -e, -f-n 플래그는 -h 플래그와 함께 사용할 수 없습니다. -h 플래그와 함께 사용될 때 -b 플래그를 제외한 다른 모든 플래그는 무시됩니다.
-i 문자의 크기를 무시합니다. 예를 들어 소문자 a는 대문자 A와 동일하게 취급됩니다.
-l 긴 출력 형식입니다. diff 명령 텍스트 파일 비교의 각 결과는 페이지 배열을 위해 pr 명령을 통해 파이프됩니다. 기타 차이는 기억되고 모든 텍스트 파일 차이가 비교된 후 요약됩니다.
-n -e 플래그 출력과 유사하지만 순서는 반대이고 각 삽입 및 삭제 명령이 변경한 행의 계수가 함께 표시되는 출력을 작성합니다. 이것이 개정 제어 시스템(RCS)이 사용하는 양식입니다.
-r 공통 서브디렉토리에 diff 명령이 반복적으로 적용되게 합니다.
-s 동일하거나 그렇지 않으면 언급되지 않은 파일을 보고합니다.
-S [ 파일 ] 디렉토리 비교 시 File 변수가 지정한 파일 이전에 이름을 조합한 파일을 무시합니다. -S 플래그는 Directory1Directory2 매개변수에 지정된 디렉토리에만 적용됩니다. -r 플래그를 -S 플래그와 함께 사용하는 경우, -S 플래그는 Directory1Directory2 서브디렉토리에서 반복적으로 작동하지 않습니다.
-t 출력 행에서 탭을 확장시킵니다. 일반 출력 또는 -c 플래그 출력은 각 행의 앞에 문자를 추가하며, 이것은 원래 소스 행의 들여쓰기에 영향을 줄 수 있으며 출력 리스트를 해석하기 어렵게 만듭니다. 이 플래그는 원래 소스의 들여쓰기를 보존합니다.
-u 통합된 문맥의 세 행을 갖는 diff 명령 비교를 생성합니다.

출력은 -c 플래그의 출력과 유사하지만, 문맥 행이 반복되지 않는 것이 예외입니다. 대신, 문맥, 삭제 및 추가된 행이 함계 표시되어 인터리브(Interleave)됩니다.

-U 라인 Lines 변수에 지정된 값과 동일한 통합 컨텍스트의 여러 줄을 사용하여 diff 명령 비교를 생성합니다. 출력은 -c 플래그의 출력과 유사하지만, 문맥 행이 반복되지 않는 것이 예외입니다. 대신, 문맥, 삭제 및 추가된 행이 함계 표시되어 인터리브(Interleave)됩니다.
-w 모든 공백과 탭 문자를 무시하고 다른 빈 문자열을 똑같이 처리합니다. 예를 들면 다음과 같습니다.if ( a == b )와 동등하게 비교됩니다if(a==b).

종료 상태

이 명령은 다음과 같은 종료값을 리턴합니다.

항목 설명
0 차이가 없습니다.
1 차이점이 발견되었습니다.
>1 오류가 발생했습니다.

  1. 두 개의 파일을 비교하려면 다음을 입력하십시오.
    diff chap1.back chap1
    파일 간의 차이점이 표시됩니다chap1.bakchap1.
  2. 공백 문자의 양은 무시하면서 두 개의 파일을 비교하려면 다음을 입력하십시오.
    diff  -w prog.c.bak prog.c
    두 행에서 단어들 사이의 공백과 탭 수만이 서로 다를 경우, diff -w 명령은 이들을 동일한 것으로 간주합니다.
  3. ed 명령을 사용하여 서로 다른 파일을 다시 구성할 수 있는 명령이 포함된 파일을 만들려면 다음을 입력하십시오.
    diff  -e chap2 chap2.old >new.to.old.ed
    그러면 다음과 같은 이름의 파일이 생성됩니다new.to.old.ed 변경할 하위 명령이 포함되어 있습니다chap2에 있는 텍스트의 버전으로 다시chap2.old. 대부분의 경우,new.to.old.ed보다 훨씬 작은 파일입니다chap2.old. 삭제하여 디스크 공간을 절약할 수 있습니다chap2.old을 입력하면 언제든지 재구성할 수 있습니다:
    (cat new.to.old.ed ; echo '1,$p') | ed - chap2 >chap2.old
    괄호 안의 명령은 다음을 추가합니다1,$p편집 편집기로 전송된 편집 명령의 끝에 추가합니다. 다음1,$p를 사용하면 편집 명령이 파일을 편집한 후 표준 출력에 기록합니다. 그런 다음 이 수정된 명령 시퀀스는 편집 명령(| ed)를 입력하면 편집기가 이를 표준 입력으로 읽습니다. 플래그를 사용하면 ed 명령이 파일 크기 및 기타 추가 정보를 표시하지 않도록 합니다 chap2.old.

파일

항목 설명
/usr/bin/diff diff 명령을 포함합니다.