디렉터리 구조를 제외하고 두 위치 모두에 파일이 있는지 확인하세요.

디렉터리 구조를 제외하고 두 위치 모두에 파일이 있는지 확인하세요.

사진 폴더(원본 디렉토리)가 있습니다.

사진을 Shotwell로 가져왔는데, Shotwell은 EXIF ​​데이터(새 디렉터리/년/월/일)를 기반으로 한 디렉터리 구조에 파일을 복사했습니다.

원래 디렉터리의 모든 파일이 새 디렉터리 구조에 올바르게 복사되었는지 다시 확인하고 싶습니다. 특히, 하위 디렉터리에 관계없이 새 폴더에 없는 원본 폴더의 모든 파일 목록을 생성하고 싶습니다. 이상적으로는 체크섬이나 기타 콘텐츠 검사를 포함합니다.

Linux에서 이를 달성하는 가장 좋은 방법은 무엇입니까?

답변1

한 가지 접근 방식은 한 디렉터리 트리에 있는 모든 파일의 md5sum을 하나의 파일에 저장한 다음 다른 디렉터리 트리에 있는 모든 파일의 md5sum을 다른 파일에 저장하는 것입니다. 그런 다음 그들 사이에 차이점이 있는지 확인하십시오.

그것은 다음과 같습니다:

#!/bin/sh

find dir1/ -type f -exec md5sum {} + | sort > dir1.md5
find dir2/ -type f -exec md5sum {} + | sort > dir2.md5
comm -3 <(cut -d ' ' -f 1 dir1.md5) <(cut -d ' ' -f 1 dir2.md5)

두 파일 모두에 없는 md5sum 목록이 출력됩니다( man comm옵션 참조 -3). 인쇄된 모든 md5sum은 예를 들어 또는 를 사용하여 파일에서 파일 이름을 찾는 dir1.md5데 사용할 수 있습니다 .dir2.md5grepawk

그런데, 확실하지 않은 경우 .md5 파일에는 md5sum과 파일 이름이 모두 포함되어야 하지만 파일 이름 없이 md5sum(.md5 파일의 첫 번째 "필드")만 비교하려고 합니다(경로/이벤트 md5sum이 다음과 같기 때문). 동일하지만 두 파일 간에 파일 이름도 항상 다릅니다. 따라서 프로세스 cut는 로 대체됩니다 comm.

참고: dir2에는 있지만 dir1에는 없는 파일의 md5sum은 탭 하나만큼 들여쓰기됩니다. 이는 특정 md5sum이 속한 파일(디렉토리 트리)을 아는 데 유용하므로 이를 사용하여 dir1.md5의 첫 번째 열에서 파일 이름을 추출하고 dir2.md5의 두 번째 열에서 파일 이름을 검색할 수 있습니다. 아니면 그냥 선행 공백을 제거하십시오 sed.

관련 정보