czkawka
Multi functional app to find duplicates, empty folders, similar images etc.
Top Related Projects
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
A simple, fast and user-friendly alternative to 'find'
Disk Usage/Free Utility - a better 'df' alternative
A more intuitive version of du in rust
The next gen ls command
Fast disk usage analyzer with console interface written in Go
Quick Overview
Czkawka is an open-source, multi-functional app designed to find and remove unnecessary files from your computer. It offers various tools to detect duplicate files, empty directories, similar images, and more, helping users clean up their storage and organize their data efficiently.
Pros
- Comprehensive set of tools for file management and cleanup
- Cross-platform support (Windows, macOS, Linux)
- User-friendly GUI and CLI options
- Actively maintained and regularly updated
Cons
- May require some technical knowledge for advanced features
- Performance can be slower on very large file systems
- Limited integration with cloud storage services
- Some features may be overwhelming for casual users
Getting Started
To get started with Czkawka:
- Download the latest release from the GitHub releases page.
- Extract the downloaded archive.
- Run the executable file:
- On Windows: Double-click the
.exe
file. - On macOS: Open the
.app
file. - On Linux: Run the binary file from the terminal or create a desktop shortcut.
- On Windows: Double-click the
For CLI usage, open a terminal and navigate to the extracted directory, then run:
./czkawka_cli --help
This will display available commands and options for the CLI version.
To use the GUI version, simply run the executable without any arguments:
./czkawka_gui
For more detailed instructions and advanced usage, refer to the official documentation.
Competitor Comparisons
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
Pros of ripgrep
- Faster search performance, especially for large codebases
- More advanced regex support and search options
- Better integration with command-line tools and workflows
Cons of ripgrep
- Limited to text-based file searching
- Lacks GUI, which may be less user-friendly for some users
- Doesn't offer file deduplication or other disk space management features
Code comparison
ripgrep:
pub fn search<R: io::Read>(mut rdr: R) -> io::Result<()> {
let mut buf = [0; 8 * (1<<10)];
loop {
let n = rdr.read(&mut buf)?;
if n == 0 { break; }
// Process buffer contents
}
Ok(())
}
Czkawka:
pub fn find_duplicates(
directories: &[String],
recursive: bool,
excluded_directories: &[String],
minimal_file_size: u64,
) -> Vec<Vec<FileEntry>> {
// Implementation for finding duplicate files
}
While both projects are written in Rust, they serve different purposes. ripgrep focuses on efficient text searching, while Czkawka offers a broader set of file management tools, including duplicate file detection and disk space analysis. ripgrep excels in performance and command-line integration, whereas Czkawka provides a more user-friendly GUI and diverse file management features.
A simple, fast and user-friendly alternative to 'find'
Pros of fd
- Written in Rust, offering high performance and memory safety
- Simpler syntax and more user-friendly than traditional
find
command - Supports colored output and parallel command execution
Cons of fd
- Limited to file and directory search functionality
- Lacks advanced features like duplicate file detection or disk space analysis
- May not be as comprehensive for system-wide file management tasks
Code Comparison
fd:
let walker = WalkBuilder::new(root)
.hidden(false)
.ignore(false)
.git_ignore(use_gitignore)
.build();
Czkawka:
let mut directories: Vec<PathBuf> = Vec::new();
for dir in &directories_included {
directories.push(PathBuf::from(dir));
}
Key Differences
- fd focuses on fast and user-friendly file searching
- Czkawka offers a wider range of file management tools, including duplicate detection and disk space analysis
- fd is primarily a command-line tool, while Czkawka provides both CLI and GUI interfaces
- Czkawka has more extensive configuration options for various file management tasks
- fd is more lightweight and specialized, while Czkawka is a more comprehensive file management suite
Both projects are open-source and written in Rust, leveraging the language's performance benefits. While fd excels at quick file searches, Czkawka provides a broader set of file management utilities for users needing more advanced features.
Disk Usage/Free Utility - a better 'df' alternative
Pros of duf
- Focused on disk usage visualization, providing a clean and intuitive interface
- Supports colorized output for better readability
- Lightweight and fast, with minimal system resource usage
Cons of duf
- Limited functionality compared to Czkawka's broader feature set
- Lacks file management capabilities like duplicate detection and removal
- Only available as a command-line tool, without a graphical user interface
Code Comparison
duf (Go):
func (m *Mount) Usage() (*UsageStat, error) {
stat := syscall.Statfs_t{}
err := syscall.Statfs(m.Mountpoint, &stat)
if err != nil {
return nil, err
}
// ... (calculation logic)
}
Czkawka (Rust):
pub fn get_disk_usage(path: &Path) -> Result<DiskUsage, String> {
match fs2::available_space(path) {
Ok(available) => {
let total = fs2::total_space(path)?;
Ok(DiskUsage { available, total })
}
Err(e) => Err(e.to_string()),
}
}
While both projects deal with disk-related operations, duf focuses specifically on disk usage visualization, whereas Czkawka offers a broader range of file management features. duf provides a more specialized tool for disk usage analysis, while Czkawka aims to be a comprehensive file management utility.
A more intuitive version of du in rust
Pros of dust
- Written in Rust, offering high performance and memory safety
- Provides a simple and intuitive command-line interface
- Lightweight and focused solely on disk usage analysis
Cons of dust
- Limited functionality compared to Czkawka's broader feature set
- Less customization options for sorting and filtering results
- No graphical user interface, which may be less accessible for some users
Code comparison
dust:
pub fn get_dir_size(path: &Path) -> Result<u64, Error> {
let mut size = 0;
for entry in WalkDir::new(path).min_depth(1).into_iter().filter_map(|e| e.ok()) {
size += entry.metadata()?.len();
}
Ok(size)
}
Czkawka:
pub fn get_dir_size(dir: &Path) -> u64 {
WalkDir::new(dir)
.into_iter()
.filter_map(|e| e.ok())
.filter(|e| e.file_type().is_file())
.map(|e| e.metadata().map(|m| m.len()).unwrap_or(0))
.sum()
}
Both projects use similar approaches for calculating directory sizes, utilizing the walkdir
crate to traverse directories efficiently. Czkawka's implementation is more concise, using functional programming constructs like filter_map
and sum
. dust's version is more explicit, using a mutable size
variable and a for loop.
The next gen ls command
Pros of lsd
- Focused on enhancing the
ls
command with color coding and icons - Lightweight and fast for directory listing operations
- Cross-platform support (Linux, macOS, Windows)
Cons of lsd
- Limited functionality compared to Czkawka's file management features
- Doesn't provide file deduplication or cleanup capabilities
- Less suitable for large-scale file organization tasks
Code Comparison
lsd (main.rs):
fn main() -> io::Result<()> {
let flags = Flags::parse();
let mut stdout = StandardStream::stdout(ColorChoice::Auto);
let config = Config::from_flags(&flags)?;
let output = Core::new(config).run()?;
display::print(&mut stdout, &output, &flags)
}
Czkawka (main.rs):
fn main() {
let gui_running = Arc::new(AtomicBool::new(false));
let arguments = Arguments::parse();
match arguments.command {
Some(Commands::Gui) => start_gui(gui_running),
Some(Commands::Cli { command }) => start_cli(command),
None => println!("No command specified. Use --help for more information."),
}
}
The code comparison shows that lsd focuses on directory listing and output formatting, while Czkawka offers a more complex structure with GUI and CLI options for file management tasks.
Fast disk usage analyzer with console interface written in Go
Pros of gdu
- Written in Go, potentially offering better performance for disk usage analysis
- Provides a terminal user interface (TUI) for easier navigation and visualization
- Supports multiple platforms including Linux, macOS, and Windows
Cons of gdu
- Focused solely on disk usage analysis, lacking additional file management features
- May require more system resources compared to lightweight command-line tools
Code Comparison
gdu (Go):
func (a *App) analyzeDir(dir string, parent *File) (*File, error) {
f, err := os.Open(dir)
if err != nil {
return nil, err
}
defer f.Close()
// ... (additional code)
}
Czkawka (Rust):
pub fn find_duplicates(
directories: &[PathBuf],
recursive_search: bool,
excluded_directories: &[PathBuf],
minimal_file_size: u64,
maximal_file_size: u64,
ignore_hard_links: bool,
) -> Vec<Vec<FileEntry>> {
// ... (implementation details)
}
Summary
While gdu focuses on disk usage analysis with a user-friendly TUI, Czkawka offers a broader range of file management features. gdu may provide better performance for its specific task, but Czkawka's versatility makes it suitable for various file-related operations. The choice between the two depends on the user's specific needs and preferences.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Czkawka (tchâ¢kavâ¢ka (IPA: [ËʧÌkafka]), "hiccup" in Polish) is a simple, fast and free app to remove unnecessary files from your computer.
Krokiet ((IPA: [ËkrÉcÉt]), "croquet" in Polish) same as above, but uses Slint frontend.
Features
- Written in memory-safe Rust
- Amazingly fast - due to using more or less advanced algorithms and multithreading
- Free, Open Source without ads
- Multiplatform - works on Linux, Windows, macOS, FreeBSD and many more
- Cache support - second and further scans should be much faster than the first one
- CLI frontend - for easy automation
- GUI frontend - uses GTK 4 or Slint frameworks
- No spying - Czkawka does not have access to the Internet, nor does it collect any user information or statistics
- Multilingual - support multiple languages like Polish, English or Italian
- Multiple tools to use:
- Duplicates - Finds duplicates based on file name, size or hash
- Empty Folders - Finds empty folders with the help of an advanced algorithm
- Big Files - Finds the provided number of the biggest files in given location
- Empty Files - Looks for empty files across the drive
- Temporary Files - Finds temporary files
- Similar Images - Finds images which are not exactly the same (different resolution, watermarks)
- Similar Videos - Looks for visually similar videos
- Same Music - Searches for similar music by tags or by reading content and comparing it
- Invalid Symbolic Links - Shows symbolic links which point to non-existent files/directories
- Broken Files - Finds files that are invalid or corrupted
- Bad Extensions - Lists files whose content not match with their extension
Changelog and new releases can be found in Github releases or in CHANGELOG.md.
More about latest version, you can find in Medium article
Usage, installation, compilation, requirements, license
Each tool uses different technologies, so you can find instructions for each of them in the appropriate file:
Comparison to other tools
Bleachbit is a master at finding and removing temporary files, while Czkawka only finds the most basic ones. So these two apps shouldn't be compared directly or be considered as an alternative to one another.
In this comparison remember, that even if app have same features they may work different(e.g. one app may have more options to choose than other).
Czkawka | Krokiet | FSlint | DupeGuru | Bleachbit | |
---|---|---|---|---|---|
Language | Rust | Rust | Python | Python/Obj-C | Python |
Framework base language | C | Rust | C | C/C++/Obj-C/Swift | C |
Framework | GTK 4 | Slint | PyGTK2 | Qt 5 (PyQt)/Cocoa | PyGTK3 |
OS | Lin,Mac,Win | Lin,Mac,Win | Lin | Lin,Mac,Win | Lin,Mac,Win |
Duplicate finder | â | â | â | â | |
Empty files | â | â | â | ||
Empty folders | â | â | â | ||
Temporary files | â | â | â | â | |
Big files | â | â | |||
Similar images | â | â | â | ||
Similar videos | â | â | |||
Music duplicates(tags) | â | â | â | ||
Invalid symlinks | â | â | â | ||
Broken files | â | â | |||
Names conflict | â | â | â | ||
Invalid names/extensions | â | â | â | ||
Installed packages | â | ||||
Bad ID | â | ||||
Non stripped binaries | â | ||||
Redundant whitespace | â | ||||
Overwriting files | â | â | |||
Multiple languages | â | â | â | â | |
Cache support | â | â | â | ||
In active development | Yes | Yes | No | Yes | Yes |
Other apps
There are many similar applications to Czkawka on the Internet, which do some things better and some things worse:
GUI
- DupeGuru - Many options to customize; great photo compare tool
- FSlint - A little outdated, but still have some tools not available in Czkawka
- AntiDupl.NET - Shows a lot of metadata of compared images
- Video Duplicate Finder - Finds similar videos(surprising, isn't it), supports video thumbnails
CLI
Due to limited time, the biggest emphasis is on the GUI version so if you are looking for really good and feature-packed console apps, then take a look at these:
- Fclones - One of the fastest tools to find duplicates; it is written also in Rust
- Rmlint - Nice console interface and also is feature packed
- RdFind - Fast, but written in C++ ¯\_(ã)_/¯
Contributions
Contributions to this repository are welcome.
You can help by creating:
- Bug reports - memory leaks, unexpected behavior, crashes
- Feature proposals - proposal to change/add/delete some features
- Pull Requests - implementing a new feature yourself or fixing bugs.
If the change is bigger, then it's a good idea to open a new issue to discuss changes, but issues with
label
PR welcome
are already checked and accepted. - Documentation - There is an instruction which you can improve.
- Translations - Instruction how to translate files is available here
- External contributions - App use big number of external libraries like lofty, image-rs or symphonia so improving this libraries will automatically improve Czkawka
You can also help by doing other things:
- Creating text articles - LinuxUprising or Ubunlog
- Adding Czkawka to repositories - Alpine Linux or NixOS or OpenMandriva
- Creating videos - First Video or Spanish Tutorial
- Recommending it to others
Thanks
Big thanks to Pádraig Brady, creator of fantastic FSlint, because without his work I wouldn't create this tool.
Thanks also to all the people who create patches for this program, make it available on other systems, create videos, articles about it etc.
Also, I really appreciate work of people that create crates on which Czkawka is based and for that I try to report bugs to make it even better.
Donations
If you are using the app, I would appreciate a donation for its further development, which can be done here.
Top Related Projects
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
A simple, fast and user-friendly alternative to 'find'
Disk Usage/Free Utility - a better 'df' alternative
A more intuitive version of du in rust
The next gen ls command
Fast disk usage analyzer with console interface written in Go
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot