test1.txt
다음을 사용하여 파일에서 생성된 sha256과 일치하는 파일이 있는지 찾기 위해 검색을 수행한다고 가정해 보겠습니다 .
sha256sum -b test1.txt
내가 얻는 결과는 다음과 같습니다.
e3d748fdf10adca15c96d77a38aa0447fa87af9c297cb0b75e314cc313367daf * test1.txt
따라서 이름을 사용하는 대신 생성된 체크섬과 일치하는 파일을 찾고 싶습니다.
가능합니까?
답변1
find . -type f -exec sha256sum -b {} + |
grep -F 'e3d748fdf10adca15c96d77a38aa0447fa87af9c297cb0b75e314cc313367daf'
그러면 현재 디렉터리 안이나 아래의 모든 파일에 대해 SHA256 체크섬이 계산됩니다. grep
찾고 있는 체크섬과 일치하는 계산 결과가 마지막에 추출됩니다.
작업 결과가 find
파일로 전송되면 작업할 수 있는 "데이터베이스" 역할을 할 수 있습니다 grep
. 추가 로직을 추가하면 새 파일을 사용하고 파일의 정보를 업데이트하는 크론 작업을 생성할 수 있습니다. 파일을 주기적으로 새로 고치고 이전 정보를 삭제합니다. (실제로 이 질문에 대한 내용은 아니므로 지금은 코드를 그대로 두겠습니다.) 많은 추가 노력 없이 간단한 SQLite 데이터베이스에 대해서도 이 작업을 수행할 수 있습니다.
관련 명령 구문 find
:
답변2
일반적으로 각 파일의 sha256 합계를 포함하는 데이터베이스가 없으므로 유일한 방법은 각 파일의 sha256 합계를 계산하는 것입니다(일치하는 항목이 발견되면 중지). 이는 매우 지루하고 시간이 많이 걸리는 작업이므로 실제적인 목적을 위해 대부분의 경우 대답은 '아니요'입니다.
답변3
예, 가능합니다. 하지만 시스템의 모든 파일을 체크섬하고 서명과 비교하는 무차별 대입을 통해서만 가능합니다.
(실제로 이는 파일 중복 제거기가 작동하는 방식으로, 모든 파일을 체크섬하고 동일한 내용을 가진 파일에 대한 강력한 후보 일치 항목을 찾습니다.)
체크섬으로 파일을 자주 찾는 경우 체크섬을 경로에 매핑하는 인덱스를 생성하면 이러한 체크섬을 자주 다시 계산하는 작업을 줄일 수 있습니다. 이 인덱스를 현명하게 구현하면 새 파일이나 마지막 검색 이후 업데이트된 파일을 체크섬하여 증분 업데이트를 수행할 수 있습니다.