해시값으로 파일을 검색하는 방법이 있나요?

해시값으로 파일을 검색하는 방법이 있나요?

파일을 검색할 때 해시 값을 입력으로 사용하고 전체 파일 목록과 해당 위치를 출력으로 사용할 수 있는 방법이 있습니까?

이는 포인트 파일 중복을 찾아내려고 할 때 도움이 될 수 있습니다. 나는 종종 어떤 위치에 이미 저장해 두었지만 어디에 있는지 모르는 많은 파일이 있는 상황에 처하게 됩니다. 본질적으로 중복됩니다.

예를 들어, 휴대용 하드 드라이브에 많은 파일을 보관할 수 있고 데스크탑 컴퓨터의 내부 하드 드라이브에 해당 파일의 하드 복사본을 보관할 수도 있지만 위치는 확실하지 않습니다. 이제 파일 이름이 바뀌지 않으면 파일 이름 검색을 통해 데스크탑에서 하드 카피를 찾을 수 있습니다. 그런 다음 나란히 비교할 수 있으며 동일한 경우 휴대용 하드 드라이브에 있는 복사본을 삭제할 수 있습니다. 그러나 하드 드라이브 중 하나에서 파일 이름이 변경된 경우에는 작동하지 않을 수 있습니다(새 이름이 원본과 얼마나 다른지에 따라 다름).

파일 이름이 바뀌었지만 편집되지 않은 경우 해시 값을 계산할 수 있습니다. 예를 들어 SHA1 값은 입니다 74e7432df4a66f246b5214d60b190b67e2f6ce52. 그런 다음 파일을 검색할 때 이 값을 입력으로 사용하고 운영 체제가 지정된 디렉터리 또는 전체 파일 시스템을 통해 정확한 SHA1 해시 값이 있는 파일을 검색하고 이러한 파일이 저장된 위치의 전체 목록을 출력하도록 하고 싶습니다.

저는 Windows를 사용하고 있지만 일반적으로 운영 체제에 관계없이 이와 같은 작업을 어떻게 수행할 수 있는지 알고 싶습니다.

답변1

리눅스 예:

hash='74e7432df4a66f246b5214d60b190b67e2f6ce52'
find . -type f -exec sh -c '
   sha1sum "$2" | cut -f 1 -d " " | sed "s|^\\\\||" | grep -Eqi "$1"
' find-sh "$hash" {} \; -print

이 코드는 다음과 같은 이유로 생각보다 더 복잡합니다.

  • 공백, 개행, 백슬래시, 따옴표, 특수 문자 등이 포함된 파일 이름을 올바르게 처리하기 위한 것입니다( 추가 구문 분석을 위해 -print로 변경 -print0).
  • grep -E해시(들)를 정규식( ie 와 호환 가능 egrep) 으로 허용하기 위한 것입니다.
    예를 들어 '^00|00$'파일 해시가 로 시작하거나 끝나는 경우 일치합니다 00. 보다 실용적인 예는 한 번에 많은 해시를 검색하는 것입니다. '74…|a9…|…|…|…'(간결함을 위해 줄임표, 전체 해시 사용)

*sum호환되는 인터페이스(예: )가 있는 다른 도구를 사용할 수 있습니다 md5sum.

답변2

PowerShell v.4.0 이상이 있는 경우 다음 명령을 사용할 수 있습니다.

Get-ChildItem _search_location_ -Recurse | Get-FileHash | 
Where-Object hash -eq (Get-FileHash _search_file_).hash | Select path

_search_location_중복을 검색하려는 폴더나 디스크는 어디에 있고 _search_file_어딘가에 중복이 있는 파일이 있습니다. 이 명령을 루프에 넣어 여러 파일을 검색하거나 | Remove-Item줄 끝에 추가하여 중복 항목을 자동으로 삭제할 수 있습니다.

또한 이 명령은 작은 검색 폴더에만 적합합니다. 검색 위치에 수천 개의 파일(예: 전체 HDD)이 있으면 시간이 많이 걸립니다.

답변3

이것은 흥미로운 질문입니다. 비슷한 작업을 수행하기 위해 fdupes라는 도구를 사용해 왔습니다. Fdupes는 디렉토리를 반복적으로 검색하고 모든 파일을 다른 모든 파일과 비교합니다. 먼저 크기를 비교하고, 크기가 동일하면 파일의 해시를 생성하여 비교하고, 해시가 동일하면 실제로 각 파일을 바이트 단위로 살펴보고 비교합니다.

완전히 동일한 파일을 모두 찾으면 여러 가지 작업을 수행하도록 할 수 있습니다. 중복된 파일을 삭제하고 해당 위치에 하드링크를 생성하도록 했습니다(따라서 HDD 공간이 절약됨). 하지만 중복된 파일의 위치만 출력하고 아무 작업도 수행하지 않도록 할 수도 있습니다. 문의하신 시나리오입니다.

fdupes의 몇 가지 단점은 내가 아는 한 Linux에만 해당되며 모든 파일을 다른 모든 파일과 비교하기 때문에 실행하는 데 꽤 많은 I/O와 시간이 걸린다는 것입니다. 말에 따라 파일을 "검색"하지는 않지만 동일한 해시를 가진 모든 파일을 나열합니다.

나는 그것을 강력히 추천하고, 내 데이터가 불필요하게 중복되는 일이 없도록 매일 cron 작업에서 실행되도록 설정했습니다(물론 내 백업은 제외됩니다).

Fdupes 소스 페이지

답변4

Voidtools Everything 1.5 (알파)Windows용 검색 도구에는 각 파일에 대해 CRC-32, CRC-64, MD5, SHA-1, SHA-256과 같은 다양한 해시 열을 추가하는 옵션이 있습니다.

여기에 이미지 설명을 입력하세요

그런 다음 특정 해시를 검색할 수도 있습니다. 예를 들어md5:71E.. 여기에 이미지 설명을 입력하세요

관련 정보