파일 이름(및 크기 및 날짜)과 관련하여 디렉토리 트리를 비교합니다.

파일 이름(및 크기 및 날짜)과 관련하여 디렉토리 트리를 비교합니다.

백업 복원 결과를 확인하고 싶습니다. 이는 MacOS의 TimeMachine에서 몇 가지 이상한 오류와 경고가 표시되고 복원 후 모든 것이 제자리로 돌아가는지 확인하고 싶기 때문입니다. 저는 TimeMachine이 모든 파일을 복구할 것이라고 믿지는 않지만, TimeMachine이 올바른 콘텐츠로 복구하는 모든 파일을 복구할 것이라고 믿습니다.

diff -r을 고려했지만 약 300GiB에는 시간이 오래 걸릴 것입니다. 최소한 파일 존재 여부를 비교할 수는 있지만 동일한 실행에서 크기와 날짜를 비교하는 것이 더 좋습니다.

나는 이런 해결책을 알고 있다

diff <(ls -R $PATH1) <(ls -R $PATH2)

그러나 출력을 읽기가 어렵습니다. 차라리 한쪽에 파일당 한 줄만 찾는 것이 낫습니다. 또한 양쪽에서 동일한 순서로 트리를 탐색하려면 ls를 사용해야 합니다. 파일 시스템이 다르기 때문에 이는 다를 수 있습니다.

내가 가장 얻고 싶은 것은 두 가지 경로를 모두 취하고 필요한 검사 수준(아마도 macports 외부의 무언가)에 대한 diff를 출력하는 게으른 사람들을 위한 도구입니다. 하지만 충분히 안타를 치는 것에 대해서는 걱정하지 않는다.

답변1

해결책은 다음과 같습니다.

rsync -nrv --delete dirA/ dirB/

두 폴더를 동일하게 만드는 대신 rsync를 사용하여 해당 내용만 표시합니다.회의하다. 이것이 효과입니다 -n. 주의하세요. 이 옵션을 추가하는 것을 잊지 마세요!

이는 원하는 내용에 대한 자세한 목록을 제공하는 -r재귀 검색을 의미합니다 . 다른 항목을 추가하여 모든 동일 항목을 나열 -v할 수도 있습니다 .-v

--delete소스에 존재하지 않는 대상 파일 삭제를 시뮬레이션하도록 rsync에 지시합니다 . 이 -n플래그가 없으면 dirB폴더는 와 동일해집니다 dirA.

기본적으로 rsync는 파일 이름과 타임스탬프만 확인하는데, 이는 사용자가 요청한 빠른 옵션입니다. diff 동작과 유사한 동작(그리고 똑같이 느린 동작)을 원하는 경우 -c체크섬 비교를 강제하는 플래그를 추가할 수 있습니다.

rsync -nrvc --delete dirA/ dirB/

dirA/및 에서 후행 슬래시의 사용법에 유의하십시오 . dirB/이는 에서 중요합니다 rsync. 자세한 내용을 보려면 rsync매뉴얼 페이지를 살펴보세요. 이 강력한 명령에 익숙해지는 것이 좋습니다.

답변2

당신이 언급한 "솔루션"은 정말 나쁜 솔루션(예: 이상한 파일 이름을 처리하지 않음)이고 완전히 불필요합니다. 그냥 직접 사용하십시오 diff.

diff -r "$PATH1" "$PATH2"

이는 반복적으로( -r) 디렉토리를 비교하고 파일이 있는지 또는 누락되었는지 보고합니다. 예를 들어:

$ tree
.
├── dirA
│   ├── file1
│   └── file2
└── dirB
    └── file{1}

$ diff -qr dirA dirB
Files dirA/file1 and dirB/file1 differ
Only in dirA: file2
Only in dirB: file3

-q옵션은 "조용함"을 의미하며 차이점을 인쇄하지 않고 파일이 다른 경우에만 보고합니다. 위의 예에서는 파일 dirA/file1dirB/file1내용이 다릅니다. 이 형식은 예상한 대로 간단하고 큰 디렉터리의 경우에도 상당히 빠릅니다.

관련 정보