2011-11-04 2 views
0

파일 모음이 두 개인 경우 : A와 B (두 장의 사진 모음). 두 컬렉션 간에는 겹침이 있습니다 (컬렉션 A의 모든 사진 일부는 컬렉션 B에 존재할 수도 있습니다 - 아마도 다른 파일 이름으로 존재할 수도 있지만) (잠재적으로) 다른 디렉토리 구조입니다. 또한 컬렉션 A의 파일은 컬렉션 B의 여러 위치에 여러 번 나타날 수 있지만 파일 이름이 다를 수는 있습니다.컬렉션 A의 모든 파일은 구조가 다른 컬렉션 B에 포함되어 있습니까?

컬렉션 A를 안전하게 삭제할 수 있는지 (즉, 컬렉션 A의 모든 파일이 컬렉션 B의 어딘가에 적어도 한 번 이상 존재할 수 있음) 어떻게 알 수 있습니까?

다시 말하지만 파일 내용이 아니라 파일 이름입니다. 그들은 컬렉션 A와 B

  • fdupes 사이의 서로 다른 파일 구조 (http://linux.die.net/man/1/에 대해 불평부터

    • DIFF 및 파생 상품이 나에게 도움이되지 않습니다 fdupes) (파일 크기와 MD5 서명을 비교 한 다음 확인을 위해 바이트 단위 검사를 수행함)는 복식을 검사하기위한 편리한 도구이지만 두 파일을 제거하는 컬렉션을 제거하는 것에 대한 예측할 수없는 까다로운 습관이 있습니다. "수동"옵션은 시간이 오래 걸립니다.

    fdupes도 잘못된 도구로 보입니다. 집합 A의 모든 파일이

  • +0

    http://en.wikipedia.org/wiki/Fdupes 페이지에서 원하는 것을 찾지 못하셨습니까? – Mat

    답변

    1

    먼저 결정 모두 컬렉션에서 수집 B에 대한 파일이 모두

    (while read MD5SUM FILENAME; do grep -qis $MD5SUM CollectionB.MD5SUM || echo $FILENAME does not exist in CollectionB; done)<CollectionA.MD5SUM 
    
    을 CollectionB

    파일을 놓친 찾을 것입니다 그 후
    find CollectionA -type f -print0 | xargs -0 md5sum -b > CollectionA.MD5SUM 
        find CollectionB -type f -print0 | xargs -0 md5sum -b > CollectionB.MD5SUM 
    

    를 md5sum이 차지하는 경우 단순히 알 필요가

    더 conveniant하면

    (while read MD5SUM FILENAME; do grep -qis $MD5SUM CollectionB.MD5SUM || echo ${FILENAME#\*} does not exist in CollectionB; done)<CollectionA.MD5SUM 
    

    제거하는 beginni에서 * ng 파일 이름.

    이 솔루션은 상당히 느립니다.

    +0

    아마'CollectionB'를 반으로 자르고 두 개의 스레드를 실행하면 (적어도 두 개의 코어가 있다고 가정 할 때)이 해결책이 조금 더 빨라질 것입니다. Bash의 '프로세서에 트레드를 할당하는 것'조차도 가능합니까? – Werner

    +0

    A를 B로 묶는 모든 항목을 매치하기 때문에 이것을 나눠야한다면'CollectionA '를 나눠서 올바른 결과를 얻을 수 있습니다. i 스크립트 나 correspondijg 프로세스를 코어에 할당하려하지 않았습니다. – f4m8

    +0

    ** 구조에 대한 GNU 병렬 ** : '-para -a CollectionA.MD5SUM --colsep '\ s' "grep -iq {1} CollectionB.MD5SUM || echo {2}"' – Werner