2011-11-28 1 views
1

필자는 필연적으로 실패로 끝나거나 내 Mac에서 마우스를 던지려는 프로그래밍 여정을 시작하려고합니다. 흥미로운 문제.OS X 용 중복 제거 응용 프로그램 구축 파일 용 해시로 사용해야 할 내용 및 내용

일부 기본 디렉토리에서부터 시작하여 반복적으로 각 응용 프로그램을 반복하는 응용 프로그램을 빌드하고 정확한 중복 파일을 찾으면 삭제하고 심볼릭 링크를 만듭니다. 기본적으로 빈약 한 사람은 중복 제거를 수행합니다. Mac에서 중복 파일이 많아서 디스크 공간을 비워야하기 때문에 실제로 문제가 해결되었습니다. 내가 읽은 내용에서

이는 전략이다 : 재귀를 통해

  1. 루프, 각 파일의 해시를 생성합니다. 해시는 매우 고유해야합니다. 이것이 첫 번째 문제입니다. 어떤 해시를 사용해야합니까? 이 마법의 해시를 통해 각 파일의 전체 바이너리 내용을 어떻게 실행합니까?

  2. 각 파일 해시 및 전체 경로를 키/값 저장소에 저장합니다. 나는 redis가 그것의 속도 때문에 우수한 적합하다고 생각하고 있습니다.

  3. 키/값 저장소를 반복하고, 중복 된 해시를 찾고, 중복 된 파일을 삭제하고, 심볼릭 링크를 만들고, 키/값 저장소의 행에 복사본으로 플래그를 지정하십시오.

내 질문은 따라서이다 : 나는 각 파일에 대해

  • 무엇 해싱 알고리즘을 사용한다

    ? 어떻게 이뤄지나요?
  • node는 일반적으로 I/O 유형의 항목에서 빠르기 때문에 node.js를 사용하려고 생각합니다. 문제는 노드가 CPU 집약적 인 것을 빨기 때문에 해싱이 병목 현상이 될 것입니다.
  • 다른 누락 된 부분이 있습니까?
+1

Mac OS X에서 유닉스 여행을 시작하는 것이 좋습니다. 'dedup'을 위해 지정된 폴더를 모니터링하는 자율적 인 데몬을 빌드하는 데 필요한 모든 것이 있습니다. +1 ~ SHA-1. – alphazero

답변

4

각 파일에는 어떤 해시 알고리즘을 사용해야합니까? 어떻게 이뤄지나요?

SHA1을 사용하십시오. Git은 SHA1을 사용하여 파일에 대해 고유 한 해시를 생성합니다. 충돌하는 것은 거의 불가능합니다. There is no known collision of standard SHA1.

노드는 일반적으로 물건 유형이 빠르기 때문에 node.js를 사용하려고 생각합니다. 문제는 노드가 CPU 집약적 인 것을 빨기 때문에 해싱이 병목 현상이 될 것입니다.

  • 읽기 파일 (IO 바인딩) :

응용 프로그램이 동작을 2 종류가 있습니다.

  • 해시 계산 (CPU 바인딩).
  • 제안 사항 : 네이티브 해시 라이브러리가없는 경우 스크립팅 언어 (Ruby 또는 JavaScript)에서 해시를 계산하지 마십시오. sha1sum과 같은 다른 실행 파일을 호출 할 수 있습니다. 그것은 C로 작성되었으며 빠르게 타오른다.

    NodeJS가 필요하다고 생각하지 않습니다. NodeJS는 이벤트 기반 IO에서 빠르지 만 I/O 속도를 높일 수는 없습니다. 여기서 이벤트 기반 IO를 구현할 필요가 없다고 생각합니다.

    다른 누락 된 부분이 있습니까?

    제안 사항 : 익숙한 언어로 구현하십시오. 너무 일찍 엔지니어링을하지 마십시오. 성능 문제가 발생했을 때만 최적화하십시오.

    0
    조금 늦게

    하지만 miaout의 조언을 사용하고이 함께했다 ...

    var exec = require('child_process').exec; 
    exec('openssl sha1 "'+file+'"', { maxBuffer: (200*10240) }, function(p_err, p_stdout, p_stderr) { 
        var myregexp = /=\s?(\w*)/g; 
        var match = myregexp.exec(p_stdout); 
        fileInfo.hash = "Fake hash"; 
        if (match != null) { 
        fileInfo.hash = match[1]; 
        } 
        next() 
    }); 
    

    당신 사용 sha1sum하지만 설치 사제 같은 것을 필요로하는 소프트웨어의 모든 다른 훌륭한 조각처럼. 물론 환경을 가지고 있다면 스스로 컴파일 할 수도 있습니다.