| HOME / 정보공유 / AIX 명령어 모음

diff
diff diff 명령 목적 텍스트 파일을 비교합니다. 구문
두 파일의 내용을 비교하는 방법
diff [ -c| -C Lines | -D [ String ] | -e | -f | -n ] [ -b ] [ -i ] [ -t ] File 1 File2
diff [ -h ] [ -b ] File 1 File2
디렉토리의 내용을 순서대로 정렬하고 서로 다른 파일을 비교하는 방법
diff [ -c | -C Lines | -e | -f | -n ] [ -b ] [ -i ] [ -l ] [ -r ] [ -s ] [ -S File ] [ -t ] [ -w ] Directory1 Directory2
diff [ -h ] [ -b ] Directory1 Directory2
설명
diff 명령은 텍스트 파일을 비교합니다. 단일 파일들 또는 디렉토리의 내용을 비교할 수 있습니다.
주: diff 명령은 텍스트 파일인 입력 파일에서만 사용 가능합니다.
Directory1 매개변수와 Directory2 매개변수를 지정한 경우 diff 명령은 두 디렉토리에서 같은 이름을 가진 텍스트 파일을 비교합니다. 서로 다른 2진 파일, 공통 서브디렉토리, 한 디렉토리에 존재하는 파일들을 나열합니다.
diff 명령을 일반 파일에서 수행할 때와 디렉토리 비교시 다른 텍스트 파일을 비교할 때, diff 명령은 파일들을 일치시키기 위해 어떤 행들을 변경해야 하는지를 말해줍니다. File1 또는 File2 매개변수 모두 디렉토리가 아닌 경우에는 표준 입력이 사용되도록 모두에 -(빼기 부호)를 붙일 수 있습니다. File1 매개변수가 디렉토리이면, 파일 이름이 File2 매개변수와 동일한 디렉토리에 있는 파일이 사용됩니다.
정상 출력시, 다음과 같은 양식의 행들을 포함합니다.
Lines Affected in File1 Action Lines Affected in File2 Number1
a Number2[,Number3]Number1[,Number2]
d Number3Number1[,Number2] c Number3[,Number4]
이 행은 File1을 File2로 변환하기 위한 ed 부속 명령과 유사합니다. acton 문자 앞의 숫자는 File1에 관계되며, action 뒤의 숫자는 File2에 관계됩니다. 따라서, a를 d로 교환하고 오른쪽에서부터 왼쪽으로 읽으면, File2를 File1으로 변환하는 방법을 알 수 있습니다. ed 명령에서, 동일한 쌍(여기서는 Number1 = Number2)은 하나의 숫자로 축약됩니다.
이 행을 각각 수행하면서 diff 명령은 <:가 앞에 있는 첫번째 파일에서 영향을 받는 모든 행을 표시한 다음 >가 앞에 있는 두 번째 파일에서 영향을 받는 모든 행을 표시합니다.
종료 값 0은 차이점이 없음을 나타내고, 종료 값 1은 차이점이 발견되었음을, 그리고 종료 값 2는 오류임을 나타냅니다.
주: -c, -C, -D, -e, -f 또는 -n 플래그 중 하나를 지정하면 명령행의 마지막 플래그가 선행합니다. 시스템은 오류 메세지를 발행하지 않습니다.
플래그
-b 행의 끝에 있는 일정한 공백 문자를 하나의 캐리지 리턴 문자(캐리지 리턴 앞에 오는 공백 문자는 무시함)로 취급하도록 하며, 캐리지 리턴 문자를 포함하지 않는 다른 공백 문자열을 동등하게 비교하도록 합니다.
-CLines Lines 변수에서 지정한 값과 같은 행 수의 문맥을 사용하여 diff 명령 비교를 생성합니다. -C 플래그는 출력을 약간 수정합니다. 출력은 관련된 파일 ID와 작성일로 시작합니다. 각 변경사항은 12개의 *(별표)로 이루어진 행으로 구분됩니다. File1에서 제거된 행은 -(빼기 부호)로 표시되며 File2에 추가된 행은 +(더하기 부호)로 표시됩니다. 파일간에 변경된 행은 두 파일 모두에서 !로 끝나는 단어 뒤에 삽입됩니다. 각각의 지정된 문맥 행 내의 변경사항은 출력시 그룹화됩니다.
-c 세 행의 문맥을 사용하여 diff 명령 비교를 생성합니다. -c 플래그는 출력을 약간 수정합니다. 출력은 관련된 파일 ID와 작성일로 시작합니다. 각 변경사항은 12개의 *(별표)로 이루어진 행으로 구분됩니다. File1에서 제거된 행은 -(빼기 부호)로 표시되며 File2에 추가된 행은 +(더하기 부호)로 표시됩니다. 파일간에 변경된 행은 두 파일 모두에서 !로 끝나는 단어 뒤에 삽입됩니다. 각각의 지정된 문맥 행 내의 변경사항은 출력시 그룹화됩니다.
-D [ String ] diff 명령이 File1 및 File2의 통합된 버전을 표준 출력에 작성하도록 합니다. C 선행처리기 제어가 포함되므로 String을 정의하지 않은 컴파일 결과는 File1의 컴파일과 동일하게 되고, 반면에 String은 File2를 작성합니다.
-e ed 편집기에 사용하기에 적절한 양식으로 출력을 생성하여 File1을 File2로 변환합니다. 이 플래그를 사용할 경우, 다음 쉘 프로그램은 여러 버전의 파일을 유지하는 데 도움이 될 수 있습니다. diff 명령에 의해 작성된 하나의 상위 파일($1) 및 버전간 ed 스크립트 체인($2, $3, ...)만 보유해야 합니다. 최신 버전은 표준 출력에 다음과 같이 나타납니다.
(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 플래그와 함께 사용할 수 없습니다. -b 플래그를 제외한 다른 모든 플래그는 -h 플래그와 함께 사용되면 무시됩니다.
-i 대소문자 구분을 무시합니다. 예를 들면, 소문자 a는 대문자 A와 똑같이 처리됩니다.
-l 긴 출력 형식. diff 명령에 의한 텍스트 파일 비교의 각 결과는 페이지 배열을 위해 pr 명령을 통해 파이프됩니다. 모든 텍스트 파일 차이점들이 보고된 후 다른 차이점들이 요약됩니다.
-n -e 플래그 출력과 유사하지만 순서는 반대이고 각 삽입 및 삭제 명령이 변경한 행의 계수가 함께 표시되는 출력을 작성합니다. 이는 개정 제어 시스템(RCS)에서 사용하는 양식입니다.
-r 만나는 공통 서브디렉토리들에 diff 명령의 응용프로그램을 반복적으로 적용시킵니다.
-s 동일한 파일이나 언급되지 않은 파일을 보고합니다.
-S [ File ] 디렉토리 비교시, File 변수가 지정한 파일 이전에 이름들을 대조한 파일은 무시합니다. -S 플래그는 Directory1 매개변수와 Directory2 매개변수에서 지정한 디렉토리에만 적용됩니다. -r 플래그를 -S 플래그와 함께 사용할 경우 -S 플래그는 Directory1 및 Directory2 서브디렉토리에서 반복해서 작동하지 않습니다.
-t 출력 행에서 탭을 확장시킵니다. 정상 출력 또는 -c 플래그 출력은 문자를 각 행의 앞에 추가하는데, 이는 원래 소스 행의 들여쓰기에 영향을 미쳐 출력 리스트의 해석을 어렵게 만들 수 있습니다. 이 플래그는 원래 소스의 들여쓰기를 보존합니다.
-w 모든 공백과 탭 문자를 무시하고 다른 빈 문자열을 똑같이 처리합니다. 예를 들면, if ( a == b )는 if(a==b)와 똑같이 비교됩니다.
종료 상태
이 명령은 다음 종료 값을 리턴합니다.
0 차이점이 발견되지 않았습니다.
1 차이점이 발견되었습니다.
>1 오류가 발생했습니다.
예제
두 개의 파일을 비교하려면 다음과 같이 입력하십시오.
diff chap1.back chap1
이 명령은 파일 chap1.bak와 chap1 사이의 차이점을 표시합니다.
공백 문자의 양은 무시하면서 두 개의 파일을 비교하려면 다음과 같이 입력하십시오.
diff -w prog.c.bak prog.c
두 행에서 단어들 사이의 공백과 탭 수만이 서로 다를 경우, diff -w 명령은 이들을 동일한 것으로 간주합니다.
ed 명령을 사용하여 서로 다른 파일을 다시 구성할 수 있는 명령이 포함된 파일을 만들려면 다음과 같이 입력하십시오.
diff -e chap2 chap2.old >new.to.old.ed
그러면 chap2를 chap2.old에 있는 버전의 텍스트로 변경하는 ed 부속 명령이 포함된 new.to.old.ed 파일이 작성됩니다. 대부분의 경우, new.to.old.ed는 chap2.old보다 크기가 훨씬 작은 파일입니다. chap2.old을 삭제하여 디스크 공간을 절약할 수 있으며, 다음 명령을 입력하여 언제라도 이를 다시 재구성할 수 있습니다.
(cat new.to.old.ed ; echo '1,$p') | ed - chap2 >chap2.old
괄호 안의 명령은 1,$p를 ed편집기에서 사용되는 편집 명령의 맨 끝에 추가됩니다. 1,$p는 ed 명령이 파일을 편집한 후 이를 표준 출력에 쓰도록 합니다. 이러한 수정된 일련의 명령은 ed 명령(| ed)으로 파이프되고, 편집기는 이를 표준 입력으로 읽습니다. - 플래그는 ed 명령이 파일 크기 및 다른 추가 정보를 표시하지 않도록 하는데, 이유는 이러한 정보가 chap2.old의 텍스트와 혼합될 수 있기 때문입니다.
파일
/usr/bin/diff diff 명령을 포함합니다.
관련 정보
bdiff 명령, cmp 명령, diff3 명령, ed 명령, pr 명령.