크기가 약 10MB 인 대량의 파일 (30,000 개)을 다루고 있습니다. 그들 중 일부는 (나는 2 %로 추정한다.) 실제로 복제되고, 나는 모든 복제 쌍 (또는 트리플렛)에 대해서만 사본을 보관해야한다. 효율적인 방법을 제안 해 주시겠습니까? 나는 유닉스에서 일하고있다.UNIX에서 동일한 파일 제거
감사합니다 :-)
크기가 약 10MB 인 대량의 파일 (30,000 개)을 다루고 있습니다. 그들 중 일부는 (나는 2 %로 추정한다.) 실제로 복제되고, 나는 모든 복제 쌍 (또는 트리플렛)에 대해서만 사본을 보관해야한다. 효율적인 방법을 제안 해 주시겠습니까? 나는 유닉스에서 일하고있다.UNIX에서 동일한 파일 제거
감사합니다 :-)
모든 파일의 해시를 생성하는 스크립트를 작성합니다. 집합에 해시를 저장하고 파일을 반복하며 파일이 이미 세트에서 발견 된 값으로 해시되는 경우 파일을 삭제할 수 있습니다. 이것은 예를 들어 파이썬에서하는 일은 간단합니다.
해시 테이블 항목 당 64 바이트 인 30,000 개의 파일에 대해 약 200MB 만보고 있습니다.
메타 바이트 란 무엇입니까? 어떤 종류의 이상화 된 바이트? 그리고 해시 함수가 완벽한 경우에만 솔루션이 작동합니다. –
* *는 메타 바이트가 아닙니다. 결정된. 편집증은 삭제의 경우 파일 내용을 비교할 수 있습니다. 여분의 해시를 추가하는 것도 도움이 될 수 있습니다. – Joe
@Neil 현대의 깨지지 않은 암호화 해시 함수를 사용하고 충돌을 발견하면 알고리즘은 고장 나지만 암호 용지를 얻었으므로 모두 승리합니다. 그것은 그들 중 하나를 지우기 전에 가정 중복을 비교 가치가있다. –
먼저 파일 크기를 비교 한 다음 MD5 체크섬 (물론 캐싱)을 수행하는 스크립트를 작성하고 데이터 손실에 대해 매우 염려하면 글 머리 기호를 물어보고 실제로 중복 된 바이트를 바이트 단위로 비교합니다. 파일이 어떻게 생겼는지에 대한 추가 지식이 없으면 훨씬 더 효율적으로 처리 할 수 없습니다.
다른 소스에서 높은 througput을 다운로드하므로 중복성이 있습니다. md5sum을 시도 할 것이므로 모든 것에 대한 해시 코드를 얻어야합니다. 작동하는지 알려 드리겠습니다 :-) –
가능한 중복 파일 찾기 :
find DIR -type f -exec sha1sum "{}" \; | sort | uniq -d -w40
지금 당신이 파일이 실제로 동일한 지 확인
cmp
를 사용할 수 있습니다.
이 조각을 제거하기 전에 모든 복제물을 먼저 가져올 수 있습니다. 배열의
find /path -type f -print0 | xargs -0 sha512sum | awk '($1 in seen){print "duplicate: "$2" and "seen[$1] }(!($1 in seen)){seen[$1]=$2}'
저장 모든 파일 이름은 각 반복 명령 '을 사용하여 다른 파일 내용으로 파일 내용을 비교 .IN 배열을 통과 그 다음 파일을 제거 동일 md5sum'.If 그 때는.
예를 들어 여기서 'b'파일은 'a'파일의 복사본입니다. 따라서 md5sum은 두 파일에서 동일합니다.
특정 접근 방식의 알고리즘 복잡성을 고려하고 싶을 수도 있습니다 ... – hop
복제본은 다음을 기반으로 할 수 있습니다. 1. 내용 2. 파일 이름 어떻게 하시겠습니까? – coder
내용 :-) 파일 이름 기반이 너무 쉽습니다. –