차이점: 내용이 아닌 파일이 있는 경우에만 비교하세요.

차이점: 내용이 아닌 파일이 있는 경우에만 비교하세요.

Diff를 사용하여 두 위치의 파일과 디렉터리가 동일한지 확인하고 싶지만 파일 자체의 내용을 비교하지는 않습니다. 왜냐하면 그것이 필요한 전부이고 일반 Diff는 데이터 양에 비해 너무 오래 걸리기 때문입니다. 어떻게 해야 하나요? 이 작업을 수행할 수 있는 다른 데비안 표준 도구가 있나요?

답변1

이를 위해 diff를 사용할 수 없습니다. diff를 사용해야 하는 이유는 무엇입니까? 왜 사람들은 가능한 해결책을 자세히 연구하지 않고 항상 성급하게 결론을 내리는가?

을 사용할 수 있지만 diff -qr유일한 목표가 개요된 디렉터리 구조를 비교하는 것이라면 성능 측면에서 현명하지 않습니다.여기

이 질문에 대한 대답 중 하나는

vimdiff <(cd dir1; find . | sort) <(cd dir2; find . | sort)

어느

공통 부분이 축소된 상태에서 두 디렉터리 계층을 나란히 표시하는 멋진 표시를 제공합니다.

답변2

이에 대해 논평하겠습니다마키의 대답하지만 너무 길었어요. 그의 솔루션에는 다음과 같은 경고가 있습니다.

ls구문 분석하거나 find유사한 출력입니다.강하지 않아 쉽게 부러짐. 예는 다음과 같습니다.

$ mkdir dir{1,2}
$ touch !$/file{1..5}
touch dir{1,2}/file{1..5}
$ mkdir dir1/$'\n'.
$ touch !$/whoops
touch dir1/$'\n'./whoops
$ touch dir2/whoops
$ touch dir1/onlyin1
$ touch dir2/onlyin2
$ comm <( cd dir1 ; find . | sort ) <( cd dir2 ; find . | sort )
        .
.
./
./
        ./file1
        ./file2
        ./file3
        ./file4
        ./file5
./onlyin1
    ./onlyin2
        ./whoops

comm( 대신 더 쉽게 복사하여 붙여넣을 수 있도록 3방향 텍스트 비교를 사용하고 있습니다 vimdiff. 결과는 와 같습니다 vimdiff.)

보시다시피, whoops실제로는 파일 중 하나가 whoops이름에 개행 문자가 포함된 하위 디렉터리에 있는데 파일이 두 개의 디렉터리에 있다는 것을 잘못 표시합니다.dir1

일반적으로 사람들은 파일 이름이나 디렉토리 이름에 개행 문자를 추가하지 않습니다. 대답은 다음 vimdiff과 같습니다.~해야 한다다른 특수 문자와도 작동합니다(아직 테스트하지는 않았지만). 그러나 이는 여전히 주의해야 할 사항입니다. 이것을 스크립트나 어떤 종류의 프로덕션 코드에 넣으려면 두 개의 디렉토리 트리를 올바르게 탐색하고 비교하는 등 더 강력하게 만드는 작업을 수행하십시오.

관련 정보