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 文件系统

Download history 119/week @ 2024-05-04 102/week @ 2024-05-11 108/week @ 2024-05-18 98/week @ 2024-05-25 89/week @ 2024-06-01 105/week @ 2024-06-08 92/week @ 2024-06-15 106/week @ 2024-06-22 104/week @ 2024-06-29 96/week @ 2024-07-06 86/week @ 2024-07-13 133/week @ 2024-07-20 1075/week @ 2024-07-27 112/week @ 2024-08-03 792/week @ 2024-08-10 265/week @ 2024-08-17

2,301 每月下载量

MIT 许可证

180KB
4.5K SLoC

Rust Crates.io Packaging status

dua (-> 磁盘使用分析器) 是一个方便了解指定目录磁盘使用情况的工具。默认为并行执行,并将尽可能快地提供相关信息,充分利用固态硬盘。可选地删除冗余数据,删除速度比 rm 更快。

asciicast

安装

二进制发布

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

https://search.nixos.org/packages?channel=23.11&show=dua&from=0&size=50&sort=relevance&type=packages&query=dua

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

交互式模式

使用 iinteractive 子命令启动交互式模式。使用 ? 获取键盘快捷键的帮助。使用此模式进行探索,以及/或删除文件和目录以释放磁盘空间。

请注意,由于存在多阶段过程,已采取了极大的谨慎来防止意外删除,这使得此模式适用于探索。

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