fdupes는 좋지만 설치가 안 된다 — 나는 무설치 중복 탐지기를 만들었다.
Source: Dev.to
fdupes, jdupes, rdfind, fclones — 이 파일 중복 탐지기는 모두 훌륭합니다. 또한 이들은 모두 설치 파일을 먼저 받아야 하는 네이티브 바이너리입니다. 이는 실제로 파일 중복을 찾는 상자(locked‑down work laptop, client의 서버, CI 실행기, 일회용 컨테이너, 도움을 주는 동료의 머신)에서는 불가능한 일이에요.
그래서 저는 duphunt를 만들었습니다. 이는 Node나 Python이 설치된 순간 바로 실행되는 중복 탐지기로, 아무것도 설치할 필요 없이 자체 의존성도 없습니다. $ npx duphunt ~/Downloads 2 duplicate group(s), 5 files, 8.1 MB reclaimable
4.1 MB × 2 4.1 MB reclaimable /Users/me/Downloads/invoice.pdf /Users/me/Downloads/invoice (1).pdf
2.0 MB × 3 4.0 MB reclaimable /Users/me/Downloads/clip.mp4 /Users/me/Downloads/clip- copy. mp4 /Users/me/Downloads/old/clip. mp4
그룹은 사용량(불필요한 공간) 기준으로 가장 큰 waste부터 정렬되어 있어, 삭제할 파일은 바로 위쪽에 표시됩니다. 크기별로 그룹화합니다. 다른 크기의 두 파일이 byte‑동일할 수 없으므로 고유한 크기를 가진 파일은 전혀 열리지 않습니다. 충돌을 해시합니다. 각 size 그룹 안에서 파일마다 스트리밍 SHA‑256을 적용합니다(64 KB 청크 — 다중 GB 파일도 메모리를 초과하지 않음). 동일한 내용을 보고합니다. 같은 해시 ⇒ 실제 바이트‑단위 중복입니다. 재활용 가능한 공간에 따라 그룹화되고 순위 지정됩니다. 이 도구는 파일을 삭제하지 않습니다. 사용자가 직접 삭제할 파일을 선택합니다.
$ npx duphunt . # Node — nothing to install pip install duphunt # Python — same tool, same results
Node와 Python 두 가지 빌드가 SHA‑256을 사용해 동일한 출력을 내며, 기존에 설치된 환경에 그대로 맞춰집니다. duphunt assets/ —exit-code # 중복 자산이 빌드에 침투하면 실패하도록 함 duphunt . —json # 또는 그룹을 자체 툴링으로 파이프 가능
의존성 없이 모두 지원됩니다. 표준 라이브러리만 사용합니다. 자체 의존성을 끌어들이는 “중복 찾기” 도구라면 조금 과한 것 같습니다. 각 실제 파일은 한 번만 계산됩니다. 중복 또는 겹치는 루트(duphunt ~/a ~/a/ b) 및 심볼릭 링크 별칭은 실제 경로 기준으로 de‑duplicated되어 숫자를 과대평가하지 않습니다. (진정한 하드 링크는 여전히 표시됩니다.) 기본적으로 빈 파일과 심볼릭 링크는 건너뛰어집니다 ( —min-size 0 와 —follow 옵션을 사용하면 제외되지 않음).
npm: https://www.npmjs.com/package/duphunt
PyPI: https://pypi.org/project/duphunt/
소스: https://github.com/jjdoor/duphunt
오늘 날 중복 파일을 찾기 위해 무엇을 사용하시나요 — 그리고 “설치할 수 없는 상자에 접근할 수 없다”는 문제가 당신도 겪었나요? CI를 중복 검사에 실제로 차단하는 사람이 있을지 궁금합니다.