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

127 lines
5.4 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-08-27 06:49:43 +12:00
It is in very early development, so most of the functions aren't added and doesn't work.
2020-09-05 09:09:11 +12:00
This is my first ever project in Rust so probably a lot of things are written in the most optimal way.
2020-08-27 06:49:43 +12:00
## Done
2020-09-02 08:48:20 +12:00
- Rich instruction with examples - CLI(`cargo run --bin czkawka_cli`)
- GTK Frontend(Still WIP) - (`cargo run --bin czkawka_gui`)
2020-09-22 21:24:55 +12:00
- Basic layout
- Remembering of buttons between different tabs
- Orbtk Frontend(Still very early WIP) - (`cargo run --bin czkawka_gui_orbtk`)
2020-09-19 21:25:58 +12:00
- Saving results to file
- Duplicated file finding
- Including and excluding directories(absolute paths)
- Option to remove all except newest, oldest and one oldest or newest
- Fast(by size) or accurate(by hash) file checking
2020-09-19 21:25:58 +12:00
- Support for * wildcard when excluding files and folders
- Checking only selected extensions(default macros like IMAGE, VIDEO, TEXT are available)
- Empty folders finding
2020-09-02 08:48:20 +12:00
- Advanced empty files finding(finds and remove folders which contains only empty folders)
- Option to remove all files
2020-08-27 06:49:43 +12:00
## TODO
2020-09-02 08:48:20 +12:00
- Comments - a lot of things should be described
- Probably extern argument parser in czkawka-cli could be used
2020-09-19 21:25:58 +12:00
- More unit tests
- Debian package
- Finding files with debug symbols
2020-08-31 03:18:04 +12:00
- Maybe windows support, but this will need some refactoring in code
2020-09-04 07:46:22 +12:00
- Translation support
- Add support for fast searching based on checking only first ~1 MB of file.
2020-09-22 21:24:55 +12:00
- GTK Gui
- Selection of records(don't know how to do this)
- Popups
- Choosing directories(included, excluded)
- Popup with type of deleted records
- Add Czkawka name to main window(now is czkawka_gui)
2020-09-24 04:38:47 +12:00
- Run in another thread searching to be able to pause
2020-09-23 06:35:37 +12:00
- Orbtk GUI
- Basic selecting included and excluded folders
- Text field to show informations about number of found folders/files
- Simple buttons to delete
2020-08-27 06:49:43 +12:00
## Usage and requirements
Rustc 1.46 works fine(not sure about a minimal version)
GTK 3.18 - for GTK backend
2020-09-02 08:48:20 +12:00
For now only Linux(and probably 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-09-06 06:26:10 +12:00
- Run GTK GUI(Still WIP)
```
cargo run --bin czkawka_gui
```
![GUI GTK](https://user-images.githubusercontent.com/41945903/94106023-d72f9700-fe3a-11ea-821d-48484afd74fb.png)
- Run alternative Orbtk GUI(Still WIP, and 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)
- Run CLI
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)
## How it works?
### Duplicate Finder
The only required parameter for checking duplicates is included folders `-i`. This parameter validates provided folders - which must have absolute path(without ~ and other similar symbols at the beginning), not contains *(wildcard), be dir(not file or symlink), exists. Later same things are done with excluded folders `-e`.
2020-09-06 06:26:10 +12:00
Next, this included and excluded folders are optimized due to tree structure of file system:
- Folders which contains another folders are combined(separately for included and excluded) - `/home/pulpet` and `/home/pulpet/a` are combined to `/home/pulpet`
- Included folders which are located inside excluded ones are delete - Included folder `/etc/tomcat/` is deleted because excluded folder is `/etc/`
- Non existed directories are being removed
- Excluded path which are outside included path are deleted - Excluded path `/etc/` is removed if included path is `/home/`
If after optimization there is no included folders, then program ends with non zero value(TODO, this should be handled by returning value).
2020-09-06 06:26:10 +12:00
Next with provided by user minimal size of checked size `-s`, program checks recursively(TODO should be an option to turn off a recursion) included folders and checks files by sizes and put it files with same sizes to different boxes.
Next boxes which contains only one element are removed because files inside are not duplicated.
2020-09-06 06:26:10 +12:00
Next by default also is checked hash to be sure that files with equal size are identical.
## 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.
I checked my home directory without any folder exceptions(I removed all directories from FSlint advanced tab) which contained 379359 files and 42445 folders and 50301 duplicated files in 29723 groups which took 450,4 MB.
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 a lot of faster.
2020-09-22 21:24:55 +12:00
Duplicate Checker(Version 0.1.0)
| App| Executing Time |
|:----------:|:-------------:|
| Fslint (First Run)| 140s |
| Fslint (Second Run)| 23s |
| Czkawka CLI Release(First Run) | 128s |
| Czkawka CLI Release(Second Run) | 8s |
| App| Idle Ram | Max Operational Ram Usage |
|:----------:|:-------------:|:-------------:|
| Fslint | | |
| Czkawka CLI Release | |
| Czkawka GTK GUI Release | |
Empty folder finder
| App| Executing Time |
|:----------:|:-------------:|
| Fslint | |
| Czkawka CLI Release | |
| Czkawka GTK GUI Release | |
2020-09-08 02:07:29 +12:00
Differences should be more visible when using slower processor or faster disk.
2020-08-27 06:49:43 +12:00
## License
2020-09-05 09:09:11 +12:00
Code is distributed under MIT license.