diff를 사용하여 디렉토리 비교

diff를 사용하여 디렉토리 비교

나는 바이너리 파일을 포함하는 AIX 6의 두 디렉토리를 비교하려고 합니다. 나는 해당 서버와 내 Linux 서버( 사용할 수 없는 경우) 간에 일관된 출력 형식을 유지하려고 하기 때문에 diff이 방법을 선호합니다 .dircmpdircmp

diff man페이지 표시 에 따르면 ,

Directory1 및 Directory2 매개변수가 지정된 경우 diff 명령은 두 디렉토리 모두에서 동일한 이름을 가진 텍스트 파일을 비교합니다. 하나의 디렉터리에만 나타나는 다양한 바이너리, 공통 하위 디렉터리 및 파일을 나열합니다.

그러나 이진 파일도 비교되고 그 차이점이 stdout으로 출력되므로 터미널 화면이 인쇄할 수 없는 문자로 가득 차게 되고 심지어 내 창(내가 사용 중인)의 크기도 수정됩니다 pUTTY. 버전에는 diff이 옵션이 없습니다 -q. 이 출력을 억제하고 파일이 다르다고 보고하는 방법이 있습니까? rsync -n양쪽에서 누락된 파일을 찾으려면 to 및 from 인수를 반대로 사용하여 두 번 실행해야 하기 때문에 사용하고 싶지 않습니다 .

관련 질문:여기그리고여기

답변1

다양한 시스템에서 다양한 작업을 수행하는 수단 없이 작성할 수 있는 이식 가능한 코드의 양에는 제한이 있습니다. dircmp효과가 있으면 기분 나빠하지 마세요.GNU 차이점가능한 경우.

if type dircmp >/dev/null 2>/dev/null; then
  dircmp dir1 dir2
else
  diff -r dir1 dir2
fi

어떤 파일이 변경되었는지 알고 싶고 콘텐츠 나열에 관심이 없다면 출력을 필터링하여 diff헤더 행만 유지할 수 있습니다. (경고: 파일 이름에 개행 문자가 포함되어 있으면 출력이 구문 분석되지 않을 수 있습니다.)

diff -r dir1 dir2 | grep -v '^[<>0-9]'

grep -v '[^<>]'이는 변경된 행 범위에 대한 정보를 유지하면서 변경된 행의 내용을 필터링하기 위해 수행됩니다 .

답변2

cat -v인쇄되지 않는 문자가 ^x또는 로 표시되도록 출력을 파이프할 수 있으며 M-x최소한 터미널이 손상되지 않습니다. 각 파일 diff가 어떤 유형의 헤더를 인쇄하는지 알고 있다면 grep그냥 인쇄 할 수 있습니다 | grep -E 'Only in|differ'(예: 이 예제에 대한 도구를 찾지 못했습니다).

관련 정보