내용의 체크섬을 통해 어떤 파일이 존재하지 않는지 찾으려고 합니다. 시스템의 임의 상태를 /foo
나타내는 두 개의 디렉토리가 있고 /bar
모든 디렉토리를 찾고 싶습니다.문서in root는 /bar
루트에 존재하지 않습니다 /foo
(재귀적으로). /bar/**
사전
CheckSum -> filepath
/foo/**
with 사전 빼기
CheckSum -> filepath
md5sum 등을 사용하여 이것을 작성할 수 있지만 이를 수행하는 유틸리티가 이미 있어야 합니다.
명확성을 위해 두 파일이 동일한 경우와는 별개로위치(이름, 경로)별로 동일하게 인식되게 하고 싶습니다.
테스트 케이스
몇 가지 테스트 데이터를 사용하여 트리를 만들어 보겠습니다.
/tmp/foo
└── myFile (duplicate of /tmp/bar/quz/asdf/otherFileName)
/tmp/bar
├── qaz
│ └── findMe
└── quz
└── asdf
└── otherFileName (duplicate of /tmp/foo/myFile)
스크립트 생성,
mkdir -p /tmp/foo /tmp/bar/quz/asdf /tmp/bar/qaz
# One file that exists in both locations
dd if=/dev/urandom of=/tmp/foo/myFile bs=1k count=10
cp /tmp/foo/myFile /tmp/bar/quz/asdf/otherFileName
# One file (findMe) that exists in only /mpt/bar/
dd if=/dev/urandom of=/tmp/bar/qaz/findMe bs=1k count=10
그래서 프로그램은 비교 /tmp/foo
하고 /tmp/bar
찾아야합니다/tmp/bar/qaz/findMe
답변1
두 트리(합계에 대한 하나의 열과 파일 이름에 대한 하나의 열)에 대해 md5sum 목록을 생성하고 그 결과를 파일 이름의 해시로 사용할 수 있는 스크립트(예: awk 또는 perl)에 파이프하여 스크립트를 만들 것입니다. 동일한 해시 값을 가진 파일 이름을 보고합니다.
이것은 단순한 진술이 아니라 자주 묻고 해결하는 질문입니다(콘텐츠별로 중복 파일을 검색하면 백만 개가 넘는 결과가 나옵니다).
다음 내용이 도움이 될 수 있습니다.