파일을 해시코드와 연결하고 이를 사용하여 파일 시스템의 어느 위치에서나 파일을 찾는 방법

파일을 해시코드와 연결하고 이를 사용하여 파일 시스템의 어느 위치에서나 파일을 찾는 방법

해시 코드를 생성하고 이를 파일에 연결한 다음 해당 해시를 사용하여 파일 시스템에서 파일을 검색할 수 있는 도구(셸 스크립트 또는 Python 스크립트)를 만들고 싶습니다(상위 폴더 열기). 파일을 강조 표시하고/하거나 기본 응용 프로그램을 사용하여 파일을 엽니다.)

나는 이것을 사용하고 있기 때문에 이것에 익숙합니다.서지, MacOS에서만 실행되는 과학 논문 관리용 데이터베이스 소프트웨어입니다. BibDesk는 비슷한 접근 방식을 사용하여 PDF 파일을 데이터베이스의 항목에 연결하므로 파일 이름을 변경하거나 파일 시스템의 다른 위치로 이동하더라도 연결이 유효하게 유지됩니다.

이것도 보세요답변관련 질문.

답변1

물론 BibDesk 내부는 볼 수 없습니다. 그러나 기능 설명에 따르면 주요 작업은 데이터베이스를 저장하는 것이라고 말하고 싶습니다. 이 데이터베이스에서는 해시를 파일과 연결합니다.

그런 다음 모니터링해야 하는 폴더를 모니터링하고 변경된 파일을 찾습니다. 대규모 개인 문헌 데이터베이스에도 수백만 개의 파일이 없다는 점을 고려하면, 찾은 파일의 해시가 여전히 예상대로인지 확인하기 위해 다시 검색하는 것조차 알아차리기 어려울 것입니다. 특히 이 작업이 백그라운드에서 수행되는 경우에는 더욱 그렇습니다.

컴퓨터 파일 시스템의 파일은 콘텐츠 또는 해시 주소가 아닌 경로 주소로 지정됩니다. 각각의 추가 조회 정보는 별도로 저장해야 합니다. (대부분의 파일 시스템에서 파일에 대한 추가 정보를 저장할 수 있지만 해당 정보를 찾으려면 파일 경로를 알아야 합니다. 그러면 문제가 해결되지 않습니다.)

따라서 귀하의 답변은 약간 오해의 소지가 있습니다. 파일의 콘텐츠 해시를 사용하여 파일 시스템에서 파일을 검색할 수 없습니다. (물론 파일 이름을 해시로 변경할 수도 있지만 그런 뜻은 아닌 것 같습니다.)

그러나 완전성을 이유로 데이터베이스에 해시를 유지하는 것이 좋을 수 있으며(파일을 전달하기 전에 해시가 올바른지 확인할 수 있음), 말했듯이 파일 변경 사항을 추적하거나 자주 재검색할 수 있는 능력이 있는 경우 원인을 재발견하기 위해

답변2

Python이나 Bash에서 이 작업을 수행할 수 있습니다.

해시/값 데이터베이스는 해시와 값을 저장하는 데 사용될 수 있습니다. gdbm 도구 및 라이브러리를 검색하세요. 원래 도구는 BSD 유닉스에서 시작되었으며 gdbm은 gnu 버전이었으며 이제는 일반적으로 표준 설치로 배포되지 않습니다.

sudo apt install gdbmtoolbash를 사용하여 해시/값 쌍의 데이터베이스를 생성하는 데 도움이 되는 유틸리티를 얻기 위해 ubuntu(20.04)에 gdbmtool을 설치했습니다 . 다시 한번 나는 sha256sum파일의 해시를 생성하기 위해 명령줄 유틸리티를 고소했습니다.

내 목표는 동일한 사진(그리고 음악)을 감지하는 도구를 원한다는 점에서 귀하의 목표와 다릅니다. 하지만 과거에는 중복된 항목을 제거할 수 있도록 이름을 변경했으며 모든 항목을 하나의 디렉토리에 넣었습니다. 전체 파일 시스템을 검색하지 마십시오. 라는 도구로 시작했지만 dedupe내 요구 사항에 비해 번거롭다는 것을 알았습니다. 이것은 오래 전 일이었으며 이제는 동일한 작업을 수행하는 다른 도구(fslint, dupeguru 등)가 있습니다.

데이터베이스의 초기 생성 외에도 파일이 이동(이름 변경)될 때 데이터베이스를 업데이트하고, 새 경로 값과 올바른 새 위치를 설정하고, 나타나는 대로 새 항목을 추가하기 위해 주기적으로 무언가를 실행해야 합니다.

파일 이름 경로를 해시하는 것이 아니라 파일의 내용을 해시하여 새 위치에서 발견된 기존의 동일한 파일을 감지할 수 있다고 생각합니다.

파일 경로가 있으면 xdg-open명령줄(또는 스크립트)을 사용하여 파일을 열 수 있습니다.

동일한 해시에 대해 여러 경로를 추적하려는 경우 관계형 데이터베이스가 sqlite더 적합할 수 있습니다. 키-값 데이터베이스에서는 허용되지 않기 때문입니다. 하지만 저는 주제에서 약간 벗어났습니다(Unix 및 Linux). 더 자세히 설명하면 여러분이 검색하고 읽는 데 도움이 될 몇 가지 Unix 도구의 이름을 제공했습니다.

답변3

귀하의 질문을 올바르게 이해했다면 사용자 xattrs를 통해 이를 달성할 수 있습니다. 배포판에 attr 패키지를 설치하십시오. 예를 들어, debian/ubuntu 에서 명령을 사용하세요 sudo apt install attr. 그런 다음 읽은 man attr다음 이와 같은 명령을 사용하여 파일 확장 속성에 해시를 저장할 수 있습니다.man setfattrman getfattr

setfattr -n user.md5sum -v $(md5sum test.bin | awk '{print $1}') test.bin

명령으로 읽으십시오

getfattr -n user.md5sum  test.bin
# file: test.bin
user.foo="a7fd41d58563137a6f73e738008d9970"

속성 이름 앞에는 네임스페이스가 붙어야 합니다.user.

관련 정보