Skip to main content

Duperemover

A Python utility for efficiently deduplicating files in directories.

PyPI Python Coverage Ruff

Install

pip install duperemover

Usage

from duperemover import Deduplicator

dedup = Deduplicator(
    directory="/path/to/directory",
    hash_algorithm="xxhash",
    replace_strategy="hardlink",
    progress=True,
)
dedup.deduplicate()
dedup.print_stats()

CLI

duperemover --help

Command Syntax

duperemover <directory> [options]

Arguments:
  <directory>            Directory to scan for duplicates.
  --hash-file <file>     File to store hashes (default: .hashes.db).
  --buffer-size <size>   Buffer size for hashing (default: 65536, 64KB).
  --hash-algorithm <alg> Hashing algorithm (choices: "xxhash", "blake3", "sha256", default: "xxhash" if available).
  --replace-strategy <strategy> Strategy for handling duplicates (choices: "hardlink", "delete", "rename", default: "hardlink").
  --max-threads <num>    Number of threads to use for processing (default: 4).
  --sync-interval <num>  Sync interval for hashes to disk (default: 100).
  --progress             Show a progress bar while processing files.
  --dry-run              Simulate the deduplication process without making any changes.
  --use-bloom-filter     Use Bloom filter to speed up duplicate checking.
  --exclude PATTERNS     Exclude files matching these patterns.

Examples

# Basic deduplication (using default hashing algorithm)
duperemover /path/to/directory

# Using SHA256 as the hashing algorithm
duperemover /path/to/directory --hash-algorithm sha256

# Simulate deduplication (dry run)
duperemover /path/to/directory --dry-run

# Create hard links for duplicates, use Bloom filter, and show progress
duperemover /path/to/directory --replace-strategy hardlink --use-bloom-filter --progress

Features

  • Hash Algorithms: Choose between xxhash, blake3, and sha256 for calculating file hashes.
  • Duplicate Handling Strategies:
    • hardlink: Replace duplicates with hard links.
    • delete: Delete duplicate files.
    • rename: Rename duplicate files by appending .duplicate to their names.
  • Multi-threading: Process files in parallel to speed up deduplication.
  • Bloom Filter: Optionally, enable the Bloom filter to speed up duplicate checks by avoiding re-hashing files.
  • Exclusion Patterns: Exclude files matching specific patterns from the deduplication process.
  • Progress Bar: Optionally display a progress bar for better visibility during the deduplication process.
  • Dry Run: Run the deduplication process without making any actual changes (useful for testing).

API

Deduplicator

from duperemover import Deduplicator

Constructor

Deduplicator(
    directory: str,
    hash_file: str = ".hashes.db",
    buffer_size: int = 65536,
    hash_algorithm: str = "xxhash",
    replace_strategy: str = "hardlink",
    max_threads: int = 4,
    sync_interval: int = 100,
    progress: bool = False,
    dry_run: bool = False,
    exclude_patterns: list[str] | None = None,
    use_bloom_filter: bool = False,
)

Methods

  • deduplicate(): Scan the directory for duplicates and process each file.
  • print_stats(): Print deduplication statistics.
  • count_files(directory): Count the number of files in a directory.
  • get_file_hash(file_path): Calculate and return the hash of a file.
  • are_same_file(file1, file2): Check if two files are the same based on their inodes.
  • create_hard_link(source, target): Create a hard link from the source file to the target file.
  • delete_duplicate(file_path): Delete a duplicate file.
  • rename_duplicate(file_path): Rename a duplicate file by appending .duplicate.
  • is_excluded(file_path): Check if a file matches any exclusion pattern.

Development

git clone https://github.com/daedalus/duperemover.git
cd duperemover
pip install -e ".[test]"

# run tests
pytest

# format
ruff format src/ tests/

# lint
ruff check src/ tests/

# type check
mypy src/

Metadata

Release files for duperemover 0.1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for duperemover 0.1.0.1
File Size Uploaded
duperemover-0.1.0.1.tar.gz 7.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for duperemover 0.1.0.1
File Interpreter ABI Platform
duperemover-0.1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 17.0 kB

Release files / duperemover-0.1.0.1.tar.gz

Download URL duperemover-0.1.0.1.tar.gz
Size 7.9 kB
Tags Source
SHA-256 checksum
How to use checksums
1576a2ca260ab0653064b1748fa4c909520752c450c881a81ab876cce1eb77e9
BLAKE2b-256 checksum
How to use checksums
41e69d6c3ac9ae82bbbdedd7c8947c564a48368328f7daab3ee3b0bf72f07c08
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 25, 2026.

Transparency log

Release files / duperemover-0.1.0.1-py3-none-any.whl

Download URL duperemover-0.1.0.1-py3-none-any.whl
Size 9.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
40413a96ae0a63f155d25a1f0e40cd3f2a446aae5560d4f7e19e3db6d9ad9a35
BLAKE2b-256 checksum
How to use checksums
0c82d63b5e3f69a36b5541c0898e86db702182ad89c88174a63ddd52da2a5da6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page