`rmlint` finds space waste and other broken things on your filesystem and offers to remove it. It is able to find:

- Duplicate files & directories.
- Nonstripped Binaries
- Broken symlinks.

- Empty files.
- Recursive empty directories.
- Files with broken user or group id.

Key Features:

- Extremely fast.
- Flexible and easy commandline options.
- Choice of several hashes for hash-based duplicate detection

- Option for exact byte-by-byte comparison (only slightly slower).
- Numerous output options.
- Option to store time of last run; next time will only scan new files.

- Many options for original selection / prioritisation.
- Can handle very large file sets (millions of files).
- Colorful progressbar. (😃)

# User manual

Although `rmlint` is easy to use, you might want to read these chapters first. They show you the basic principles and most of the advanced options:

- Installation
  - Dependencies
  - Compilation
  - Troubleshooting
- Gentle Guide to `rmlint`
  - Beginner Examples
  - Filtering input files
  - Outputs & Formatters
  - Paranoia mode
  - Original detection / selection
  - Finding duplicate directories
  - Replaying results
  - Miscellaneous options
- Graphical user interface
  - Installation
  - Usage
  - Developers
- Cautions (or why it’s hard to write a dupefinder)
  - Good Practice when Deleting Duplicates
  - Attributes of a Robust Duplicate Finder
- Frequently Asked Questions
  - `rmlint` finds more/less dupes than tool `X`!
  - Can you implement feature `X`?
  - I forgot to add some options before running on a large dataset. Do I need to re-run it?
  - I have a very large number of files and I run out of memory and patience.

If you have usage questions or find weird behaviour, you can also try to reach us via IRC in `#rmlint` on `irc.freenode.net`.

Since version `2.4.0` we also feature an optional graphical user interface:

# Informative reference

These chapters are informative and are not essential for the average user. People that want to extend `rmlint` might want to read this though:

- Developer’s Guide
- Translating `rmlint`
- Benchmarks
- Online-manpage of rmlint(1)

The Changelog is also updated with new and futures features, fixes and overall changes.

# Authors

`rmlint` was and is written by:

Christopher Pahl | https://github.com/sahib | 2010-2015
Daniel Thomas | https://github.com/SeeSpotRun | 2014-2015

Additional thanks to:

- qitta (Ideas & Testing)
- vvs- (Scalability testing)

- My cats.
- Attila Toth

- All sane bugreporters (there are not many)
- All packagers, porters and patchers.

# License

`rmlint` is licensed under the terms of GPLv3.

# Donations

If you think rmlint saved [*] you some serious time and/or space, you might consider a donation. You can donate either via Flattr or via PayPal:

Or just buy us a beer if we ever meet. Nice emails are okay too.

[*] | If it freed you from your beloved data: Sorry. [†]

[†] | Please file a bug or read the source and provide a patch. [‡]

[‡] | For more than 100GB of data loss we owe you one beer. [§]

[§] | If you don’t like beer or there’s only Budweiser available, you can order a Club Mate.