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