logo
Kurashizu Blogwhere ideas flow
  • Home
  • News
  • Blog
  • About
  • Home
  • News
  • Blog
  • About

© 2026 Kurashizu. All rights reserved.

Admin·New Post·Service Status
Powered by Cloudflare·01.11.26
← Back to news

DskDitto: Ultra-fast, parallel duplicate-file detector

Original article
github.com|58 points|13 comments|by ingve|Jul 22, 2026

dskDitto: High-Performance Parallel Duplicate Finder

Go Reference Go Report Card License

dskDitto is an exceptionally rapid, parallelized utility designed to locate duplicate files. It features interactive menus that transform the tedious process of cleaning up redundant data into a seamless experience.


🚀 Core Capabilities

The tool is engineered for speed and flexibility. Here is a breakdown of its primary features:

  • Extreme Velocity: Utilizes parallel processing to scan massive drives almost instantly.
  • Dual Interfaces:
    • Default: A sophisticated Terminal User Interface (TUI) built with Bubble Tea.
    • Experimental: A graphical user interface (GUI) powered by Raylib.
  • Risk-Averse Management: Safely purge duplicates or swap them for symlinks via confirmation prompts.
  • Targeted Search: Hash a single file to find every identical copy across your entire system.
  • Cryptographic Flexibility: Supports both SHA-256 (standard) and BLAKE3 for content verification.
  • Advanced Filtering:
    • Filter by file size or directory depth.
    • Ignore hidden files, symlinks, or virtual filesystems.
    • Respect filesystem boundaries.
  • Data Export: Generate reports in CSV, JSON, or plain text formats.
  • Hard-link Intelligence: Recognizes Unix hard-links to prevent false-positive duplicate reports.

Logic Workflow


🛠 Installation

To install the tool, you will need Go 1.22+.

Standard CLI/TUI Version:

go install github.com/jdefrancesco/dskDitto/cmd/dskDitto@latest

The binary will be located at $(go env GOPATH)/bin/dskDitto (usually ~/go/bin).

GUI-Enabled Version: Ensure you have CGo and Raylib installed on your system, then run:

go install -tags gui github.com/jdefrancesco/dskDitto/cmd/dskDitto@latest

📖 Usage & Configuration

Run the tool using the following syntax: dskDitto [options] PATH ...

Command Line Flags

FlagDescription
--versionDisplay version and exit.
--no-bannerSuppress the initial startup greeting.
--guiLaunch the experimental Raylib GUI (requires GUI build).
--profile fileGenerate a CPU profile and save to file.
--time-onlyScan and exit immediately, showing only the duration.
--min-size bytesIgnore files smaller than this value.
--max-size bytesIgnore files larger than this (Default: 4 GiB; 0 for unlimited).
--all-sizesShortcut for --max-size 0.
--hiddenInclude hidden files and directories.
--exclude pathSkip specific paths and their children (can be used multiple times).
--no-symlinksDo not follow or scan symbolic links.
--emptyInclude files with 0 bytes.
--include-vfsScan virtual filesystems (e.g., /dev, /proc).
--one-file-system / --xdevStay within a single filesystem device.
--dir-concurrency intSet manual limit for directory reads (0 = auto).
--no-cachePrevent the OS from caching files during hashing.
--currentNo recursion; scan only the provided paths.
--depth levelsLimit how deep the recursion goes.
--dups countOnly display groups with at least count files.
--text / --bulletOutput results as text without opening the TUI.
--remove keepKeep keep files per group and delete the rest.
--linkUsed with --remove; replaces duplicates with symlinks.
--file pathFind duplicates of one specific file.
--name-onlyGroup by filename only (ignores size/content).
--file-shallow pathFind files with the same name as path (shallow mode).
--fuzzyUse similarity detection rather than exact matches.
--fuzzy-threshold pctMinimum similarity % for fuzzy mode (Default: 75%75\%75%).
--fuzzy-same-extIn fuzzy mode, only compare files with matching extensions.
--hash algoChoose sha256 or blake3.
--csv-out fileExport results to a CSV file.
--json-out fileExport results to a JSON file.
--fs-detect pathIdentify the filesystem type of the given path.
--color-safeUse a basic TUI theme for compatibility.
--no-confirmBypass confirmation prompts for deletion/linking.

Note: You can terminate any active scan by pressing Ctrl+C.


🛡 Safety and File Manipulation

The philosophy of dskDitto is safety first. It will never delete your files automatically.

Operational Modes:

  1. Read-Only (Default): When using --text, --bullet, or the standard TUI, the tool only identifies and reports duplicates.
  2. Destructive Mode: Actual changes only occur if the --remove flag is utilized.
    • Deletion: --remove keep deletes all but the specified number of files in each group.
    • Symlinking: Adding --link to the remove command converts the redundant files into symlinks pointing to the preserved original.

Confirmation Logic: Unless the --no-confirm flag is active, the TUI and GUI will always prompt the user for a confirmation code before executing mass deletions or link conversions to prevent catastrophic accidents.

Fuzzy Matching Math

In --fuzzy mode, the tool calculates similarity based on a threshold: Similarity=(Matching Data BlocksTotal Data Blocks)×100≥Threshold\text{Similarity} = \left( \frac{\text{Matching Data Blocks}}{\text{Total Data Blocks}} \right) \times 100 \ge \text{Threshold}Similarity=(Total Data BlocksMatching Data Blocks​)×100≥Threshold