https://github.com/ksxgithub/parallel-disk-usage
Highly parallelized, blazing fast directory tree analyzer
https://github.com/ksxgithub/parallel-disk-usage
chart disk-usage du dust filesystem graph pdu rust size
Last synced: 3 days ago
JSON representation
Highly parallelized, blazing fast directory tree analyzer
- Host: GitHub
- URL: https://github.com/ksxgithub/parallel-disk-usage
- Owner: KSXGitHub
- License: apache-2.0
- Created: 2021-05-16T07:03:18.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2025-02-11T05:12:16.000Z (about 1 year ago)
- Last Synced: 2025-04-12T20:43:35.233Z (12 months ago)
- Topics: chart, disk-usage, du, dust, filesystem, graph, pdu, rust, size
- Language: Rust
- Homepage: https://crates.io/crates/parallel-disk-usage
- Size: 945 KB
- Stars: 557
- Watchers: 5
- Forks: 13
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Parallel Disk Usage (pdu)
[](https://github.com/KSXGitHub/parallel-disk-usage/actions?query=workflow%3ATest)
[](https://github.com/KSXGitHub/parallel-disk-usage/actions/workflows/benchmark.yaml)
[](https://github.com/KSXGitHub/parallel-disk-usage/actions/workflows/clippy.yaml)
[](https://github.com/KSXGitHub/parallel-disk-usage/actions/workflows/fmt.yaml)
[](https://crates.io/crates/parallel-disk-usage)
Highly parallelized, blazing fast directory tree analyzer.
## Description
`pdu` is a CLI program that renders a graphical chart for disk usages of files and directories, it is an alternative to [`dust`](https://github.com/bootandy/dust) and [`dutree`](https://github.com/nachoparker/dutree).
## Benchmark
The benchmark was generated by [a GitHub Workflow](https://github.com/KSXGitHub/parallel-disk-usage/blob/0.20.0/.github/workflows/deploy.yaml#L431-L601) and uploaded to the release page.
Programs
* `pdu` v0.20.0
* [`dust`](https://github.com/bootandy/dust) v1.2.1
* [`dua`](https://github.com/Byron/dua-cli) v2.30.1
* [`ncdu`](https://dev.yorhel.nl/ncdu)
* [`gdu`](https://github.com/dundee/gdu) v5.31.0
* `du`
benchmark results
(lower is better)
[_(See more)_](https://github.com/KSXGitHub/parallel-disk-usage-0.20.0-benchmarks/blob/master/tmp.benchmark-report.CHARTS.md)
## Demo

[](https://asciinema.org/a/416663)
[](https://asciinema.org/a/416664)
## Features
* Very fast.
* Relative comparison of separate files.
* Extensible via the library crate or JSON interface.
* Unbiased regarding hardlinks: All hardlinks are treated as equally real.
* Optional hardlink detection and deduplication (would make `pdu` proportionally slower).
* Optional progress report (would make `pdu` slightly slower).
* Customize tree depth.
* Customize chart size.
## Limitations
* Ignorant of reflinks (from COW filesystems such as BTRFS and ZFS).
* Does not follow symbolic links.
* The runtime is optimized at the expense of binary size.
## Usage
See [USAGE.md](./USAGE.md) for the full help text.
## Development
### Prerequisites
* [`cargo`](https://github.com/rust-lang/cargo)
### Test
```sh
./test.sh && ./test.sh --release
```
Environment Variables
| name | type | default value | description |
|---------------|-------------------|---------------|-------------------------------------------------|
| `FMT` | `true` or `false` | `true` | Whether to run `cargo fmt` |
| `LINT` | `true` or `false` | `true` | Whether to run `cargo clippy` |
| `DOC` | `true` or `false` | `false` | Whether to run `cargo doc` |
| `BUILD` | `true` or `false` | `true` | Whether to run `cargo build` |
| `TEST` | `true` or `false` | `true` | Whether to run `cargo test` |
| `BUILD_FLAGS` | string | _(empty)_ | Space-separated list of flags for `cargo build` |
| `TEST_FLAGS` | string | _(empty)_ | Space-separated list of flags for `cargo test` |
| `TEST_SKIP` | string | _(empty)_ | Space-separated list of test names to skip |
### Run
```sh
./run pdu "${arguments[@]}"
```
* `"${arguments[@]}"`: List of arguments to pass to `pdu`.
### Build
#### Debug build
```sh
cargo build --bin pdu
```
The resulting executable is located at `target/debug/pdu`.
#### Release build
```sh
cargo build --bin pdu --release
```
The resulting executable is located at `target/release/pdu`.
### Update shell completion files
```sh
./generate-completions.sh
```
## Extending `parallel-disk-usage`
The [parallel-disk-usage crate](https://crates.io/crates/parallel-disk-usage) is both a binary crate and a library crate. If you desire features that `pdu` itself lacks (that is, after you have asked the maintainer(s) of `pdu` for the features but they refused), you may use the library crate to build a tool of your own. The documentation for the library crate can be found in [docs.rs](https://docs.rs/parallel-disk-usage).
Alternatively, the `pdu` command provides `--json-input` flag and `--json-output` flag. The `--json-output` flag converts disk usage data into JSON and the `--json-input` flag turns said JSON into visualization. These 2 flags allow integration with other CLI tools (via pipe, as per the UNIX philosophy).
Beware that the structure of the JSON tree differs depending on the number of file/directory names that were provided (as CLI arguments):
* If there are only 0 or 1 file/directory names, the name of the tree root would be a real path (either `.` or the provided name).
* If there are 2 or more file/directory names, the name of the tree root would be `(total)` (which is not a real path), and the provided names would correspond to the children of the tree root.
## Installation
### Any Desktop OS
#### From GitHub
Go to the [GitHub Release Page](https://github.com/KSXGitHub/parallel-disk-usage/releases) and download a binary.
#### From [crates.io](https://crates.io)
**Prerequisites:**
* [`cargo`](https://github.com/rust-lang/cargo)
```sh
cargo install parallel-disk-usage --bin pdu
```
### Arch Linux
#### From the [Official Repository](https://archlinux.org/packages/extra/x86_64/parallel-disk-usage/)
```sh
sudo pacman -S parallel-disk-usage
```
## Distributions
[](https://repology.org/project/parallel-disk-usage/versions)
## Frequently Asked Questions
### Is this project vibe-coded?
No. "Vibe coding" means letting AI do everything without human involvement. This project uses AI-assisted workflows with active human direction and reviews.
Using AI also does not mean poor quality. On the contrary, AI reviews have helped detect previously undetected bugs.
## Similar programs
* **CLI:**
* `du`
* [`dust`](https://github.com/bootandy/dust)
* [`dutree`](https://github.com/nachoparker/dutree)
* [`dua`](https://github.com/byron/dua-cli)
* **TUI:**
* [`ncdu`](https://dev.yorhel.nl/ncdu)
* [`gdu`](https://github.com/dundee/gdu)
* [`godu`](https://github.com/viktomas/godu)
* **GUI:**
* [GNOME's Disk Usage Analyzer, a.k.a. `baobab`](https://apps.gnome.org/Baobab/)
* [Filelight](https://apps.kde.org/filelight/)
## License
[Apache 2.0](https://git.io/JGIAt) © [Hoàng Văn Khải](https://ksxgithub.github.io/).