DeepSeek Harness Remote
DeepSeek Harness Remote: DeepSeek Harness 실행 PC와 모바일·PC를 안전하게 연결해 어디서나 작업 이어받기
Windows, macOS, Linux용 매우 빠른 오픈 소스 디스크 사용량과 중복 파일 분석기이며 Rust 트리맵입니다
Blazing-fast, open-source disk usage analyzer and duplicate file finder for Windows, macOS & Linux. A modern WinDirStat and WizTree alternative written in Rust with interactive treemap visualization.
생산성GitHub @xangelix온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
A fast, cross-platform disk usage analyzer and deduplicator—with work-stealing multithreading, zero-copy snapshots, and an interactive treemap GUI.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗eDirStat is a modern, high-performance, cross-platform disk usage analyzer written in Rust. Inspired by legacy utilities like WinDirStat, it leverages an immediate-mode graphical interface egui to provide a real-time, interactive treemap visualization of your filesystem.
Unlike traditional analyzers that crawl sequentially, eDirStat is engineered from the ground up for modern multi-core systems. It couples a highly optimized, work-stealing multithreaded directory walker with a zero-copy arena data structure. This allows you to scan millions of files, locate space-wasting files using a treemap diagram (among other plots), identify duplicate files, and save or load system snapshots in milliseconds.
Up to 2.8x speedup vs WinDirStat
Up to 9.6x speedup vs QDirStat
eDirStat is, and will always remain, entirely open-source and free. However, if you'd like to support continuous development, engineering, and maintenance costs, official pre-compiled binaries for Windows, macOS, and Linux are distributed exclusively as a paid download via Itch.io - xangelix.itch.io/edirstat.
Purchasing precompiled packages directly funds the engineering efforts required to keep eDirStat fast, secure, and compatible with the latest operating systems.
https://github.com/user-attachments/assets/22075865-c258-4cee-bae4-247a48702f25
ripgrep.$MFT files can also be parsed offline on any platform.-x)..edst snapshots in the browser via the wasm build on edirstat.com.☁ iCloud, OneDrive, Dropbox dataless files), symbolic links (🔗), Unix devices (⚙ FIFOs, sockets, block/char devices), and permission restrictions (🔒) with localized tooltips across the tree, table, and details panels.eDirStat is engineered as a private, local-first utility:
Ensure you have the Rust toolchain installed. See rust-toolchain.toml for the version currently required.
# Clone the repository
git clone https://github.com/xangelix/edirstat.git
cd edirstat
# Build the release executable
cargo build --release
The compiled binary will be located at target/release/edirstat.
Note: The desktop app builds on stable Rust. Only the wasm32 web frontend (
scripts/build_web.sh) still needs the pinned nightly toolchain, for-Zbuild-stdwith atomics (wasm threads).
The released packages (deb, rpm, pacman, the Windows MSI and zip, the macOS disk image) are built by seaworthy from seaworthy.toml: eDirStat is compiled once per CPU target (crates/edirstat_app, the targets cargo-multivers used before), and the edirstat launcher (launcher/) loads the best build for the machine in its own process, with nothing unpacked or written to disk at run time. .github/workflows/release.yml runs it on every release.
To run the GUI application from the command line:
./target/release/edirstat
You can also pass a directory path as a positional argument to automatically launch and begin scanning that folder on startup:
./target/release/edirstat /path/to/scan
edirstat [path] # Scan a directory, or load a snapshot file
edirstat /path --to mysnapshot # Headless scan, saved to mysnapshot.edst.zst
edirstat /path --to snap --no-compression # Headless scan, uncompressed .edst output
edirstat /path --benchmark # Headless traversal timing report
edirstat /path -x # Restrict the scan to the same filesystem
☁ cloud placeholder, 🔗 symlink, ⚙ special file, 🔒 permission denied). You can expand/collapse folders using the [+]/[-] toggles. Use the 🔍 Filter input bar (Ctrl+F / ⌘F) to narrow down the view to matching folders or files with case-sensitive and regular expression matching modes.| Action | Windows / Linux | macOS | Description |
|---|---|---|---|
| New Scan… | Ctrl+O | ⌘O | Open the scan target selection dialog |
| Rescan | Ctrl+R / F5 | ⌘R / F5 | Refresh and re-scan the current root folder |
| Save Snapshot… | Ctrl+S | ⌘S | Export the active scan to a compressed .edst.zst snapshot |
| Search / Filter | Ctrl+F | ⌘F | Focus the directory tree filter bar |
| Dismiss / Clear | Esc | Esc | Close active modal dialog or clear the search filter |
| Focus in Treemap | ⏎ Enter | ⏎ Enter | Zoom the treemap view into the selected folder |
| Go Up One Level | Alt+↑ | ⌥↑ | Navigate up one directory level in the treemap |
| Reset Treemap Zoom | Esc | Esc | Reset the treemap zoom back to the root directory |
| Toggle Left Panel | F9 | F9 | Show / collapse the directory tree explorer panel |
| Toggle Right Panel | F11 | F11 | Show / collapse the extension stats / details panel |
| Collapse All | Ctrl+Shift+C | ⇧⌘C | Collapse all expanded directory tree nodes |
| Move to Trash | Del | Del | Send selected file or folder to the system Recycle Bin / Trash |
| Delete (Permanent) | Shift+Del | ⇧ Del |
If you need to analyze a server or remote environment:
edirstat /path/to/my/dir --to mysnapshotmysnapshot.edst file to another machine.edirstat and click 📖 Load Snapshot to open and navigate the tree with full interactivity, requiring no active filesystem connection.crates/edirstat/src/engine/traversal.rs)The traversal engine avoids the performance bottlenecks of standard recursive single-threaded walkers. It utilizes crossbeam-deque for task scheduling inspired by ripgrep:
dev/ino on Unix, and volume_serial_number/file_index on Windows) against an inherited stack of ancestors./ automatically skip virtual and mounted system directories (such as /proc, /sys, and /dev)./sys or /proc).crates/edirstat/src/engine/coordinator.rs)To prevent traversal worker threads from blocking the UI rendering cycle, edirstat decouples directory scanning from interface updates through an event-driven coordinator model:
ScanEvent) over a lock-free channel to a dedicated background Coordinator thread.FileArenaSnapshot read-only copy via arc_swap. The Coordinator issues updated snapshots to the GUI every 100–1000 milliseconds during an active scan (tiered by tree size).crates/edirstat-core/src/arena.rs)To conserve memory and avoid pointer-chasing latency, the directory tree is flattened into a single contiguous array (arena):
[ Root Node ] ---> [ Child A ] ---> [ Child B ] ---> [ Child C ]
|
v
[ Sub-child 1 ]
FileNode blocks reference parent, child, and sibling nodes using raw u32 indices rather than heap-allocated pointers (Box or Rc).FileNode struct is annotated with bytemuck::Pod and bytemuck::Zeroable, strictly aligned to 8-byte boundaries.StringPool). Nodes reference these names via a lightweight StringId wrapper.crates/edirstat-core/src/snapshot.rs)The current (v3) .edst snapshot layout stores the arena as compact columnar data, optionally wrapped in a transparent Zstd container (.edst.zst):
+-------------------------------------------------------------+
| Header (72 Bytes, Little-Endian) |
| - Magic: "EDST" |
| - Version: u16 (v3; v2 legacy files still load) |
| - Uncompressed Size: u64 |
| - Node Count: u64 |
| - String Pool Offset & Length |
+-------------------------------------------------------------+
| Columnar Node Data (DFS pre-order) |
| - Control bytes (flags + timestamp shortcut bits) |
| - Varint columns: name ids, sizes, zigzag timestamp deltas |
| - Varint file/child counts for directories |
| - String Pool (varint-framed packed UTF-8) |
+-------------------------------------------------------------+
--no-compression writes a raw .edst without the wrapper.FLAG_DATALESS) and special file flags (FLAG_SPECIAL) in addition to directory and symlink states, making snapshots significantly smaller and richer to decode than the legacy flat-binary (v2) layout, which remains readable for backward compatibility.crates/edirstat-gui/src/stats/deduplicator.rs)https://github.com/user-attachments/assets/a5743098-e88f-4fb7-bc0d-df073ed0615f
The deduplication module detects byte-for-byte identical files with minimal disk I/O. Candidate duplicate groups are identified and isolated through a 7-stage pipeline:
is_file() validation on disk immediately before grouping and hashing to protect against modifying files changed since snapshot generation.The engine remains hardlink-aware, allowing it to accurately differentiate between physical duplicate copies and single-inode hardlinks, which consume no additional storage.
WinDirStat (v2.6.2)A dense Windows primary drive.
NVMe PCIe Gen3 [ntfs]
Up to 2.8x speedup
video coming soon!
WizTree (v4.31)A dense Windows primary drive.
NVMe PCIe Gen3 [ntfs]
Up to 2.5x speedup
https://github.com/user-attachments/assets/2190e1d1-51ac-4b5e-89e6-80dfd1d9c8de
QDirStat (v2.0.01)To evaluate traversal performance, edirstat includes a custom comparison benchmark target comparing it against qdirstat-cache-writer (the official headless command-line crawler shipped with QDirStat for background scanning).
edirstat and the perl script execution for QDirStat). This captures full end-to-end CLI execution time, including binary loading, runtime initialization (Perl interpreter boot vs. Rust startup), option parsing, and traversal startup.Across a diverse suite of storage devices and directory layouts, eDirStat consistently exceeds the performance of QDirStat in duplicate, delivering up to a 9.6x speedup (ranging from 6.0x to 9.6x) in scan time!
Whether crawling highly nested code repositories on high-speed NVMe drives, game installations on SATA SSDs, or deep directory trees on enterprise HDDs, edirstat's parallel, work-stealing multithreading model, allows it to remain the fastest disk usage analyzer available.
Key Highlights:
QDirStat backend writer, especially on SSDs.AMD Ryzen 9 9950X3D (32)
Linux 6.18.34-1-cachyos-lts
/home/tux/Documents/gitSamsung 990 Pro NVMe SSD (Gen 4) [btrfs]
Dense, an enormous amount of small files and directories.
Running benches/compare.rs (target/release/deps/compare-95ade4249a41f004)
==================================================
eDirStat vs QDirStat Benchmark
==================================================
Target Directory : /home/tux/Documents/git
CPU Cores Available: 32
==================================================
Performing 2 warm-up runs...
Performing 5 sample runs...
Run 1/5... edirstat: 856.10ms, qdirstat: 6.70s
Run 2/5... edirstat: 869.77ms, qdirstat: 7.11s
Run 3/5... edirstat: 881.21ms, qdirstat: 6.89s
Run 4/5... edirstat: 865.67ms, qdirstat: 6.91s
Run 5/5... edirstat: 851.16ms, qdirstat: 7.31s
================ RESULTS SUMMARY ================
eDirStat (Rust, parallel):
Min : 851.16ms
Max : 881.21ms
Median: 865.67ms
Mean : 864.78ms
QDirStat (Perl writer):
Min : 6.70s
Max : 7.31s
Median: 6.91s
Mean : 6.98s
Speedup (QDirStat / eDirStat): 7.99x
==================================================
/run/media/tux/F1/Games/PC/SteamLibrary/steamapps/commonSamsung SSD 870 QVO 8TB [btrfs]
Game files, a mix of large and small files on a SATA SSD.
Running benches/compare.rs (target/release/deps/compare-95ade4249a41f004)
==================================================
eDirStat vs QDirStat Benchmark
==================================================
Target Directory : /run/media/tux/F1/Games/PC/SteamLibrary/steamapps/common
CPU Cores Available: 32
==================================================
Performing 2 warm-up runs...
Performing 5 sample runs...
Run 1/5... edirstat: 471.00ms, qdirstat: 4.24s
Run 2/5... edirstat: 478.63ms, qdirstat: 5.12s
Run 3/5... edirstat: 467.80ms, qdirstat: 4.54s
Run 4/5... edirstat: 475.84ms, qdirstat: 4.27s
Run 5/5... edirstat: 451.38ms, qdirstat: 8.45s
================ RESULTS SUMMARY ================
eDirStat (Rust, parallel):
Min : 451.38ms
Max : 478.63ms
Median: 471.00ms
Mean : 468.93ms
QDirStat (Perl writer):
Min : 4.24s
Max : 8.45s
Median: 4.54s
Mean : 5.32s
Speedup (QDirStat / eDirStat): 9.64x
==================================================
/run/media/tux/D1Seagate Exos X18 18TB HDD [btrfs]
Large files, but fewer, on an HDD. Less directory nesting.
Running benches/compare.rs (target/release/deps/compare-95ade4249a41f004)
==================================================
eDirStat vs QDirStat Benchmark
==================================================
Target Directory : /run/media/tux/D1
CPU Cores Available: 32
==================================================
Performing 2 warm-up runs...
Performing 5 sample runs...
Run 1/5... edirstat: 8.01ms, qdirstat: 33.43ms
Run 2/5... edirstat: 5.34ms, qdirstat: 33.03ms
Run 3/5... edirstat: 5.48ms, qdirstat: 32.67ms
Run 4/5... edirstat: 4.59ms, qdirstat: 33.06ms
Run 5/5... edirstat: 5.81ms, qdirstat: 33.49ms
================ RESULTS SUMMARY ================
eDirStat (Rust, parallel):
Min : 4.59ms
Max : 8.01ms
Median: 5.48ms
Mean : 5.85ms
QDirStat (Perl writer):
Min : 32.67ms
Max : 33.49ms
Median: 33.06ms
Mean : 33.14ms
Speedup (QDirStat / eDirStat): 6.03x
==================================================
/run/media/tux/B4Toshiba MG09SACA16EA 16TB HDD [btrfs]
An enormous amount of tiny files with deep directory nesting, on an HDD.
Running benches/compare.rs (target/release/deps/compare-95ade4249a41f004)
==================================================
eDirStat vs QDirStat Benchmark
==================================================
Target Directory : /run/media/tux/B4
CPU Cores Available: 32
==================================================
Performing 2 warm-up runs...
Performing 5 sample runs...
Run 1/5... edirstat: 515.15ms, qdirstat: 3.54s
Run 2/5... edirstat: 520.41ms, qdirstat: 3.51s
Run 3/5... edirstat: 537.08ms, qdirstat: 3.50s
Run 4/5... edirstat: 580.76ms, qdirstat: 4.24s
Run 5/5... edirstat: 612.70ms, qdirstat: 4.05s
================ RESULTS SUMMARY ================
eDirStat (Rust, parallel):
Min : 515.15ms
Max : 612.70ms
Median: 537.08ms
Mean : 553.22ms
QDirStat (Perl writer):
Min : 3.50s
Max : 4.24s
Median: 3.54s
Mean : 3.77s
Speedup (QDirStat / eDirStat): 6.60x
==================================================
Benchmark Disclaimer & Configuration:
- Comparisons were conducted against WinDirStat v2.6.2, WizTree v4.31, and QDirStat v2.0.01 under controlled testing conditions with primed system caches.
- eDirStat is an independent open-source utility and is not associated with, sponsored by, or endorsed by the trademark holders of those projects.
- Performance measurements depend heavily on hardware setup, filesystem fragmentation, operating system scheduling, and disk caching behavior; individual test results may vary.
$MFT fixes and improvements, including Master File Table scanning of NTFS drives on Linux (#14) and MFT extension record support (#15).tr-TR) localization support (#17).This project is licensed under the MIT License.
Disclaimer: WinDirStat, WizTree, and QDirStat are trademarks of their respective owners. eDirStat is an independent open-source project and is not affiliated with, sponsored by, or endorsed by the trademark holders.
| Permanently delete the selected item from disk |
| Copy File Name | Ctrl+C | ⌘C | Copy selected item's file name to clipboard |
| Copy Full Path | Ctrl+Alt+C | ⌥⌘C | Copy selected item's absolute path to clipboard |
| Close Scan | Ctrl+W | ⌘W | Close the active scan and return to the home screen |
| Quit | Ctrl+Q | ⌘Q | Exit eDirStat |
| About / Help | F1 | F1 | Open the About dialog, license viewer, and Privacy Policy |