106 个稳定版本
2.29.2 | 2024年8月10日 |
---|---|
2.29.0 | 2024年3月10日 |
2.28.0 | 2024年1月23日 |
2.24.2 | 2023年12月26日 |
1.2.2 | 2019年6月5日 |
#158 in 文件系统
2,301 每月下载量
180KB
4.5K SLoC
dua (-> 磁盘使用分析器) 是一个方便了解指定目录磁盘使用情况的工具。默认为并行执行,并将尽可能快地提供相关信息,充分利用固态硬盘。可选地删除冗余数据,删除速度比 rm
更快。
安装
二进制发布
MacOS
curl -LSfs https://raw.githubusercontent.com/Byron/dua-cli/master/ci/install.sh | \
sh -s -- --git Byron/dua-cli --crate dua --tag v2.29.0
MacOS 通过 MacPorts
sudo port selfupdate
sudo port install dua-cli
MacOS 通过 Homebrew
brew update
brew install dua-cli
Linux
Linux 需要显式指定目标以获取 MUSL 构建。
curl -LSfs https://raw.githubusercontent.com/Byron/dua-cli/master/ci/install.sh | \
sh -s -- --git Byron/dua-cli --target x86_64-unknown-linux-musl --crate dua --tag v2.29.0
Windows 通过 Scoop
scoop install dua
预构建的二进制文件
有关手动安装预构建二进制文件的说明,请参阅 发布部分。
Cargo
通过 cargo
,可以使用 rustup 获取
对于 Unix…
cargo install dua-cli
# And if you don't need a terminal user interface (most compatible)
cargo install dua-cli --no-default-features
# Compiles on most platforms, with terminal user interface
cargo install dua-cli --no-default-features --features tui-crossplatform
对于 Windows,目前需要启用夜间功能。
cargo +nightly install dua-cli
VoidLinux
在您的 VoidLinux 系统上通过 xbps
xbps-install dua-cli
Fedora
在您的 Fedora 系统上通过 dnf
sudo dnf install dua-cli
Arch Linux
在您的 ArchLinux 系统上通过 pacman
sudo pacman -S dua-cli
NixOS
Nix-shell(临时)
nix-shell -p dua
NixOS 配置
environment.systemPackages = [
pkgs.dua
];
NetBSD
在您的 NetBSD 系统上通过 pkgin
pkgin install dua-cli
或者,从源码构建
cd /usr/pkgsrc/sysutils/dua-cli
make install
Windows
您可以在 发布部分 中找到 Windows 的预构建二进制文件。或者,像下面这样通过 cargo 安装:
cargo +nightly install dua-cli
用法
# count the space used in the current working directory
dua
# count the space used in all directories that are not hidden
dua *
# learn about additional functionality
dua aggregate --help
交互式模式
使用 i
或 interactive
子命令启动交互式模式。使用 ?
获取键盘快捷键的帮助。使用此模式进行探索,以及/或删除文件和目录以释放磁盘空间。
请注意,由于存在多阶段过程,已采取了极大的谨慎来防止意外删除,这使得此模式适用于探索。
dua i
dua interactive
开发
请注意,以下内容假设在Unix系统上。在Windows上,应使用Linux子系统。
运行测试
make tests
了解其他目标
make
但是为什么……
……只有一个可用的后端?之前有可用的termion
。
维护两个后端似乎比它应有的复杂性和我不喜欢的复杂性更繁琐。虽然termion
有其优点,但我从未喜欢它似乎已经失去了支持。因此,crossterm
是唯一剩下的后端,并且它被非常积极地开发。
致谢
感谢jwalk,剩下要做的就是编写命令行界面。随着jwalk
的成熟,dua应立即受益。
限制
- 如果没有提供路径而调用
dua
,则根本不会显示符号链接。- 为了跳过符号链接,目前它们被剪枝并且不作为根使用。如果符号链接不是遍历根,则将显示它们,但不会跟随。
- 交互式模式在深色终端中看起来很好(见此问题)
- 简单修复:如果文件名太大,主窗口中的文件名不会被截断。它们在右边被切掉。
- 在
tests/fixtures
中有许多示例,在交互式模式下无法正确渲染。这可能是因为图形字符未正确解释。例如,对于汉字,列大小计算不正确,导致某些列无法显示。在其他情况下,终端会出错 - 我使用alacritty,并且某些字符的性能不如iTerm3。有关更多信息,请参阅https://github.com/minimaxir/big-list-of-naughty-strings/blob/master/blns.txt。 - 在交互式模式下,您将需要大约60MB的内存来处理图中的100万个条目。
- 在交互式模式下,文件的最大数量限制为2^32 - 1(即
u32
的最大值减1)。- 一个节点用作“虚拟”根
- 实际存储的节点数量可能更低,因为边的数量可能比节点多,这些边的数量也受限于一个
u32
(我猜) - 这种限制是由底层的
petgraph
crate强加的,它将其声明为unsafe
,例如使用u64。 - 当达到该限制时,这可能是一个UB,但是从未观察到过。
类似程序
依赖项
~10–43MB
~617K SLoC