디렉토리의 MD5 체크섬 계산


29

디렉토리 내용을 비교하는 빠른 방법을 찾고 있습니다. 전체 디렉토리의 md5sum (또는 동등한 체크섬)을 수행 할 수 있습니까?

우분투 리눅스 사용하기


diff를 사용하여 디렉토리가 다른 곳을 실제로 표시하는 디렉토리를 비교할 수도 있습니다. unixtutorial.org/2008/06/how-to-compare-in-unix- 디렉토리
Kibbee

@Kibbee이를 방지하려면 각 파일의 데이터 내용 이외의 내용과 파일을 정확하게 체크섬하는 방법을 고려해야합니다. 주어진 : [체크섬] 1. A (디렉토리) -File1 [ABC]-File2 [CBA] 2. B (디렉토리) -File1 [ABC] -B1 (디렉토리) -File2 [CBA] 3. C (디렉토리) -File4 [ABC]-File5 [CBA] 4. D (디렉토리) -File1 사본 [ABC] -File2 사본 [CBA] 디렉토리 AB 는 동일한 파일을 포함하지만 동일하지 않습니다 ( B1 에서는 File2 가 서브 디렉토리에 있음) . 귀하의 예에서 AC 는 동일하다고 간주됩니다.
Jacob Lyles

답변:


36

물론- md5sum directory/*

디렉토리 재귀 또는 해시 비교와 같이 좀 더 유연한 것이 필요하면 md5deep을 사용해보십시오.

apt-get install md5deep
md5deep -r directory

디렉토리 구조를 비교하기 위해 비교할 해시 목록을 제공 할 수 있습니다.

md5deep -r -s /directory1 > dir1hashes
md5deep -r -X dir1hashes /directory2

그러면 directory1과 일치하지 않는 directory2의 모든 파일이 출력됩니다.

directory1에서 제거 된 파일 또는 directory2에 추가 된 파일은 표시되지 않습니다.


내가 의미하는 것이 아니라 내가 원했던 것 :) 나는 재귀 적으로 의미했고 마지막에 하나의 해시를 얻었지만 md5deep -l을 사용하여 출력 자체를 해싱 할 수 있다고 생각합니다.
복어

1
해싱의 순서는 일관성이 없으므로 해싱 전에 출력을 정렬해야합니다.
복어

1
결정적인 순서를 얻으려면 -j0멀티 스레딩을 비활성화하는를 사용 하십시오 (매뉴얼 페이지 참조).
Johann

1
ShaneMadden @ ♦은 설치 md5deepsudo apt-get install md5deepUbuntu 16.04있지만 나는 그것이 나에게 그것을 알려줍니다 매뉴얼 페이지를 읽으려고 할 때> md5deep에 대한 어떠한 수동으로 입력하지
Kasun Siyambalapitiya

27

두 디렉토리의 차이점이 무엇인지 알고 싶다면 rsync가 적합합니다.

rsync --archive --dry-run --checksum --verbose /source/directory/ /destination/directory

다른 파일이 나열됩니다.


2
diff -qr /source/directory/ /destination/directory/다른 파일도 표시합니다.
Konerak

체크섬 대신 비트 단위 비교를 수행하는 방법이 있습니까? 로컬 드라이브에서 더 빠를 수 있습니다.
Ali

아주 좋아요 소스 또는 대상이 원격 폴더 인 경우에도 작동합니다.username@hostname:/destination/directory
Thalis K.

11

나는이 대답으로 전에 이것에 대답했다고 생각합니다.

find . -xtype f -print0 | xargs -0 sha1sum | cut -b-40 | sort | sha1sum

제공합니다 : b1a5b654afee985d5daccd42d41e19b2877d66b1

아이디어는 모든 파일을 해시하여 해시를 한 줄에 하나씩 잘라내어 정렬하고 해시하여 단일 해시를 생성한다는 것입니다. 이것은 파일 이름에 의존하지 않습니다.


5

CFV의 응용 프로그램 만 확인하고 MD5 체크섬을 생성 할 수없는, 매우 유용합니다, 그것은 또한 CRC32, SHA1, 토런트, 파, PAR2을 할 수 있습니다.

현재 디렉토리의 모든 파일에 대한 CRC32 체크섬 파일을 작성하려면 다음을 수행하십시오.

cfv -C

현재 디렉토리의 모든 파일에 대해 MD5 체크섬 파일을 작성하려면 다음을 수행하십시오.

cfv -C -t md5 -f "현재 디렉토리 .md5sums"

각 하위 디렉토리에 대해 별도의 체크섬 파일을 만들려면

cfv -C -r

모든 서브 디렉토리에 파일을 포함하는 "슈퍼"체크섬 파일을 작성하려면 다음을 수행하십시오.

cfv -C -rr

4

이 askubuntu 답변에서 설명한대로 hashdeep을 사용했습니다. 복사 된 파일의 정확성을 확인하십시오 .

체크섬을 계산하려면

 $ cd <directory1>
 $ hashdeep -rlc md5 . > ~/hashOutput.txt

차이점을 확인하고 나열하려면 다음을 수행하십시오.

 $ cd <directory2>
 $ hashdeep -ravvl -k ~/hashOutput.txt .
 hashdeep: Audit passed
    Input files examined: 0
   Known files expecting: 0
           Files matched: 13770
 Files partially matched: 0
             Files moved: 0
         New files found: 0
   Known files not found: 0

이것은 md5deep에 비해 이름이 바뀐 (이동 된) 파일, 추가 된 파일 및 제거 된 파일을 표시 할뿐 아니라 http://www.meridiandiscovery.com/how- to / validating-copy-results-using-md5deep로 .


3

이것은 나를 위해 일했습니다 : (관심있는 디렉토리에서 실행하십시오)

md5deep -rl . | awk '{print $1}' | sort -n | md5sum

1

모든 단일 파일의 MD5 합계를 생성하고 이러한 체크섬을 사전 순으로 정렬하여 줄 바꿈을 포함하거나 포함하지 않을 수 있습니다. MD5는 암호화되어 있기 때문에 해시 해시에서도 제대로 작동합니다.

사물에 특정 순서가 있어야합니다. 그렇지 않으면 동등한 dirs에 대해 다른 결과가 나타납니다.

그리고 당신은 그냥 경우에도, 하나의 디렉토리에 어떤 파일을 추가하는 것은 완전히 결과를 변경할 것을 고려해야 .directory.DS_Store파일을.


기술적으로 다른 디렉토리에 대해 동일한 해시를 얻을 수 있습니다. 디렉토리 A에 내용이 'ab'및 'c'인 2 개의 파일이 있고 디렉토리 B에 내용이 'a'및 'bc'인 2 개의 파일이있는 경우 파일의 데이터 만 해시하면 파일이있는 경우에도 동일한 결과를 얻을 수 있습니다. 다른 내용. 디렉토리의 MD5Sum을 정의하는 방법조차 확실하지 않습니다.
Kibbee

1

특정한 경우, 일부 파일을 directory1에서 directory2로 복사 한 다음 md5 비교를 사용하여 성공적인 사본을 확인하려고한다고 가정하십시오.

먼저. directory1로 cd하고 다음을 입력하십시오.

find -type f -exec md5sum "{}" \; > ~/Desktop/md5sum.txt

directory1의 각 파일에 대해 md5 합계를 포함하는 참조 파일을 작성합니다. 이 작업이 완료되면 directory2로 cd하고 다음을 입력하기 만하면됩니다.

md5sum -c ~/Desktop/md5sum.txt

md5sum 프로그램은 md5sum.txt 파일에서 각 경로를 가져 와서 대상 폴더에서 해당 파일의 md5sum을 계산 한 다음 파일에 저장된 합계와 비교합니다.

프로세스가 완료되면 '너무 많은 파일이 일치하지 않습니다'또는 이와 유사한 내용과 같은 요약 정보가 표시됩니다.



1

많은 파일이 포함 된 백업 / 미러의 무결성을 확인해야했고 MassHash라는 명령 줄 프로그램을 작성했습니다. 파이썬으로 작성되었습니다. GTK + 런처도 사용할 수 있습니다. 그것을 확인하고 싶을 수도 있습니다 ...

http://code.google.com/p/masshash/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.