처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.07.26 32

중복 파일 정리 도구 dskDitto가 보여주는 '안전한 삭제'의 설계

Hacker News 원문 보기

디스크가 가득 찰 때마다 되풀이되는 고민이 있다. 어디에 똑같은 파일이 몇 벌씩 흩어져 있는지 알 수 없고, 막상 지우자니 원본까지 날릴까 두렵다. Go로 작성된 오픈소스 도구 dskDitto는 이 문제를 '빠른 탐지'와 '보수적인 삭제'라는 두 축으로 접근한다. 병렬 처리로 중복 파일을 신속하게 찾아내되, 명시적인 지시 없이는 어떤 파일도 삭제하거나 다시 쓰지 않는다는 원칙을 코드 차원에서 못 박아 두었다.

설치는 Go 1.22 이상 환경에서 소스로부터 이뤄지며, 결과 바이너리는 GOPATH의 bin 경로에 놓인다. 기본 설치는 CLI와 TUI만 포함하고, Raylib 기반의 실험적 GUI를 쓰려면 Raylib과 CGo를 갖춘 뒤 gui 태그를 붙여 별도로 빌드해야 한다. 콘텐츠 해싱에는 기본값으로 SHA-256을 사용한다. Blake3 옵션도 있지만, 개발자는 macOS에서는 현재 Blake3가 SHA-256보다 오히려 느리다는 점을 명시하며 향후 구현이 개선되면 역전될 수 있다고 덧붙였다.

삭제 사고를 막는 설계

dskDitto의 핵심 철학은 기본 동작이 '읽기 전용'이라는 데 있다. 스캔만으로는 아무것도 바뀌지 않고, --remove를 명시적으로 지정해야 비로소 삭제가 일어난다. TUI나 GUI에서 중복을 실제로 제거하거나 변환할 때는 확인 대화상자가 떠서 대량 변경 사고를 막는다. 자동화나 숙련 사용자를 위해 --no-confirm으로 확인 코드 입력을 건너뛸 수 있지만, 이는 안전장치를 스스로 해제하는 선택이라는 점을 이해하고 써야 한다. 스캔 도중 언제든 Ctrl+C로 중단할 수 있다는 점도 실무에서 유용하다.

삭제 대신 심볼릭 링크로 바꾸는 방식도 지원한다. TUI에서 대체하려는 중복 파일을 표시하고 L 키를 눌러 확인 코드를 입력하면, 각 그룹의 심링크가 표시하지 않은 원본 하나를 가리키도록 전환된다. 예컨대 동일한 파일 세 개로 이뤄진 그룹에 --remove 1 --link를 적용하면 실제 데이터는 한 벌만 남고 나머지는 링크로 대체되는 구조다. 변환된 항목은 TUI에서 [symlink] 접미사로 표시돼 어떤 파일이 링크인지 한눈에 구분된다. 미디어 라이브러리처럼 용량은 크지만 지우기는 아까운 데이터를 정리할 때 적합한 방식이다.

탐지 모드의 다양성과 그 경계

중복을 판별하는 방식도 여러 갈래다. --name-only는 내용을 해싱하지 않고 최종 파일명만으로 묶기 때문에, 내용이 달라도 이름이 같으면 중복으로 본다. 특정 파일을 먼저 해싱한 뒤 지정 디렉터리에서 같은 내용을 찾는 --file, 파일명 기준 얕은 매칭을 한 이름으로 제한하는 --file-shallow도 있다. 얕은 대상이 닷파일이면 숨김 파일과 디렉터리까지 자동으로 포함한다. 다만 같은 이름이라도 내용이 다를 수 있으므로 얕은 매칭에는 백업 복원이 지원되지 않으며, --backup을 --name-only나 --file-shallow와 함께 쓰면 경고를 출력하고 스캔 전에 종료한다.

바이트 단위로 같지 않더라도 유사한 파일을 찾는 --fuzzy 모드는 기본적으로 75% 이상 유사도의 그룹을 반환하며, 확장자가 같은 파일로 비교 범위를 좁힐 수도 있다. 중요한 점은 퍼지 모드가 '검토 전용'이라는 것이다. 근접 매칭이라는 성격상 --remove나 --link 같은 자동 변경 흐름은 이 모드에서 비활성화된다. 유닉스 계열에서 동일 파일에 대한 여러 하드링크는 스캔 시 하나의 항목으로 취급해 공간을 낭비하는 중복으로 잘못 보고하지 않는 점도 세심한 부분이다.

실무 도입 시 고려할 점

스크립팅을 위해 TUI 없이 중복 목록만 출력하거나, CSV·JSON으로 내보내 다른 도구에 넘기는 등 파이프라인 연동을 염두에 둔 출력 모드도 갖췄다. --exclude를 반복해 여러 경로를 제외하고, ncdu -x나 find -xdev처럼 시작 파일시스템에 머무르는 옵션, 100MiB 이상 대용량 중복만 골라 그룹당 한 벌씩 남기고 지우는 조합도 가능하다. 다만 최적 동시성 값은 환경에 따라 다르므로, 고정값을 정하기 전에 자신의 저장장치에서 벤치마크해 볼 것을 권한다. --no-cache 같은 옵션도 벤치마크 용도가 기본이어서 상시 명령에 넣기 전에 같은 워크로드로 검증하는 편이 안전하다.

정리하면 dskDitto는 화려한 기능보다 '실수로 데이터를 잃지 않게 하는' 방향에 무게를 둔 도구다. Apache 라이선스로 공개돼 있고 새 출력 모드나 성능 개선 아이디어를 반기지만, 개발자 스스로 남는 시간에만 개발한다고 밝힌 만큼 성숙도와 지속성은 감안해야 한다. GUI가 실험적 단계라는 점, 퍼지·얕은 매칭의 한계가 명확히 선을 그어져 있다는 점을 이해하고 접근한다면, 개인 저장소나 미디어 드라이브 정리에 충분히 실용적인 선택지가 될 수 있다.

이 뉴스가 유용했나요?

TTJ 코딩클래스 정규반

월급 외 수입,
코딩으로 만들 수 있습니다

17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.

144+실전 강의
17개수익 모델
4.9수강생 평점
정규반 자세히 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.