1
0
Fork 0
mirror of synced 2024-05-05 21:13:41 +12:00
czkawka/README.md

122 lines
4.9 KiB
Markdown
Raw Normal View History

2020-08-27 06:49:43 +12:00
# Czkawka
Czkawka is simple, fast and easy to use alternative to Fslint, written in Rust.
2020-09-27 19:32:44 +13:00
This is my first ever project in Rust so probably a lot of things are not being written in the most optimal way.
2020-10-02 08:29:40 +13:00
![Czkawka](https://user-images.githubusercontent.com/41945903/94850792-c200cc80-0427-11eb-99a7-23ab9cf39556.gif)
2020-09-30 21:06:40 +13:00
## Why?
2020-10-02 03:54:26 +13:00
In internet exists a lot of tools to find duplicates, empty folders, temporary files etc. but in most cases there are only available on CLI, which is hard to use by users.
GUI FSlint allows to really easy select different files and folders, but is based on old and unsupported Python 2 and GTK 2.
2020-09-30 21:06:40 +13:00
Other tools are mostly written in C/C++ to provide big performance but still needs to be tested a lot if not contains memory leaks, invalid memory reads/write and double frees.
2020-10-02 03:54:26 +13:00
But the most important thing for me was to learn Rust and create a program useful for the open source community.
2020-09-27 19:32:44 +13:00
## Features
- Written in fast and memory safe Rust
- CLI frontend, very fast and powerful with rich help
2020-09-30 21:06:40 +13:00
- GUI GTK frontend - use modern GTK 3 and looks similar to FSlint
2020-10-02 08:29:40 +13:00
- Light/Dark theme match the appearance of the system
2020-09-27 19:32:44 +13:00
- GUI Orbtk frontend(Very early WIP) - alternative GUI with reduced functionality
- Saving results to file - allows to easily read entries found by tool
- Rich search option - allows setting absolute included and excluded directories, set of allowed files extensions or excluded items with * wildcard
- Clean Glade file in which UI can be easily modernized
2020-09-27 19:32:44 +13:00
- Multiple tools to use:
2020-09-30 21:06:40 +13:00
- Duplicates - Finds duplicates basing on its size(fast), hash(accurate), first 1MB of hash(moderate)
2020-09-27 19:32:44 +13:00
- Empty Folders - Finds empty folders with help of advanced algorithm
- Big Files - Finds provided number of the biggest files in given location
- Empty Files - Looks for empty files across disk
2020-09-30 21:06:40 +13:00
- Temporary Files - Allows finding temporary files
2020-08-27 06:49:43 +12:00
## Usage and requirements
2020-09-27 19:32:44 +13:00
Rust 1.46 - probably lower also works fine
2020-10-02 08:29:40 +13:00
GTK 3.22 - for GTK backend
2020-09-27 19:32:44 +13:00
Precompiled binaries are here(may not work in every Linux distro) - https://github.com/qarmin/czkawka/releases/
For now only Linux(and maybe also macOS) is supported
- Install requirements for GTK
```
apt install -y libgtk-3-dev
```
- Download source
```
2020-09-02 08:48:20 +12:00
git clone https://github.com/qarmin/czkawka.git
cd czkawka
```
2020-10-02 08:29:40 +13:00
- Run GTK GUI
```
cargo run --bin czkawka_gui
```
2020-10-02 08:29:40 +13:00
![GUI GTK](https://user-images.githubusercontent.com/41945903/94850801-c5945380-0427-11eb-8d4c-af4946ab02d5.png)
- Run alternative Orbtk GUI(Still WIP, currently stopped due https://github.com/intellij-rust/intellij-rust/issues/5943)
2020-09-06 06:26:10 +12:00
```
cargo run --bin czkawka_gui_orbtk
```
2020-09-08 04:14:02 +12:00
![GUI Orbtk](https://user-images.githubusercontent.com/41945903/92405241-7b27fb80-f135-11ea-9fc4-5ebc2b76b011.png)
2020-09-27 19:32:44 +13:00
- Run CLI(this will print help with a lot of examples)
2020-09-02 08:48:20 +12:00
```
cargo run --bin czkawka_cli
```
2020-09-21 04:53:53 +12:00
![CLI](https://user-images.githubusercontent.com/41945903/93716816-0bbcfd80-fb72-11ea-8d31-4c87cc2abe6d.png)
## Speed
Since Czkawka is written in Rust and aims to be a faster alternative for written in Python - FSlint we need to compare speed of this two tools.
2020-10-02 08:29:40 +13:00
I checked prepared before directory, without any folder exceptions(I removed all directories from FSlint and Czkawka from other tabs than Include Directory) which contained 176 056 files and 22194 folders and 88436 duplicated files in 52330 groups which took 6,2 GB.
2020-10-02 08:29:40 +13:00
First run reads file entry and save it to cache so this step is mostly limited by disk performance, and with second run cache helps it so searching is sometimes faster(with a small amount of duplicates is even 10x faster).
2020-10-02 08:29:40 +13:00
Duplicate Checker(Version 0.1.4)
| App| Executing Time |
|:----------:|:-------------:|
2020-10-02 08:29:40 +13:00
| Fslint (First Run)| 284s |
| Fslint (Second Run)| 247s |
| Czkawka GUI Release(First Run) | 118s |
| Czkawka GUI Release(Second Run) | 120s |
2020-10-02 08:29:40 +13:00
For Fslint I used Mprof and for Czkawka Heaptrack
2020-10-02 08:29:40 +13:00
| App| Idle Ram | Max Operational Ram Usage | Stabilized after search usage |
|:----------:|:-------------:|:-------------:|:-------------:|
| Fslint | 55 MB | 160 MB | 150 MB |
| Czkawka GTK GUI Release | 8 MB | 76 MB | 75 MB |
2020-09-08 02:07:29 +12:00
Differences should be more visible when using slower processor or faster disk.
2020-10-02 03:54:26 +13:00
## Comparsion with FSLint
| | Czkawka | FSlint |
|:----------:|:-------------:|:-----:|
| Language | Rust| Python |
2020-10-02 08:29:40 +13:00
| Framework | GTK 3 (Gtk-rs)| GTK 2 (PyGTK) |
| Ram Usage | Low | Medium |
| Duplicate finder | X | X |
| Empty files | X | X |
| Empty folders | X | X |
| Temporary files | X | X |
| Big files | X | |
| Installed packages | | X |
| Invalid names | | X |
| Names conflict | | X |
| Invalid symlinks | | X |
| Bad ID | | X |
| Non stripped binaries | | X |
| Redundant whitespace | | X |
2020-10-02 03:54:26 +13:00
| Project Activity | High | Very Low |
2020-09-27 22:13:06 +13:00
2020-09-30 21:06:40 +13:00
## Name
Czkawka is a Polish word which means hiccup.
I chose this name because I wanted to hear people speaking other languages pronounce it.
2020-09-27 19:32:44 +13:00
2020-08-27 06:49:43 +12:00
## License
2020-09-05 09:09:11 +12:00
Code is distributed under MIT license.
2020-09-30 21:06:40 +13:00
Program is completely free to use.
"Gratis to uczciwa cena" - "Free is a fair price"