3 个版本 (破坏性更新)

0.10.1 2021 年 4 月 13 日
0.9.0 2019 年 7 月 15 日
0.8.0 2017 年 9 月 30 日

#459命令行工具

Download history 735/week @ 2024-03-13 784/week @ 2024-03-20 695/week @ 2024-03-27 694/week @ 2024-04-03 812/week @ 2024-04-10 663/week @ 2024-04-17 718/week @ 2024-04-24 706/week @ 2024-05-01 667/week @ 2024-05-08 656/week @ 2024-05-15 741/week @ 2024-05-22 638/week @ 2024-05-29 619/week @ 2024-06-05 616/week @ 2024-06-12 542/week @ 2024-06-19 593/week @ 2024-06-26

每月 2,466 次下载

MIT 许可证

415KB
7.5K SLoC

exa

exals 的现代替代品。

README 部分: 选项安装开发

Build status Say thanks!

Screenshots of exa


exa 是一个现代替代品,用于替换Unix和Linux操作系统提供的经典文件列表命令行程序 ls,增加了更多功能和更好的默认设置。它使用颜色来区分文件类型和元数据。它了解符号链接、扩展属性和Git。而且它 小巧快速,并且只是一个单独的二进制文件。

通过故意做出一些不同的决定,exa 试图成为 ls 的一个功能更强大、更用户友好的版本。有关更多信息,请参阅 exa 网站


exa 的选项几乎与 ls 的选项完全不同。

显示选项

  • -1--oneline:每行显示一个条目
  • -G--grid:以网格形式显示条目(默认值)
  • -l--long:显示扩展细节和属性
  • -R--recurse:递归到目录中
  • -T--tree:以树状结构递归到目录中
  • -x--across:按横向排序网格,而不是向下
  • -F--classify:通过文件名显示类型指示符
  • --colo[u]r:何时使用终端颜色
  • --colo[u]r-scale:明显突出显示文件大小的级别
  • --icons:显示图标
  • --no-icons:不显示图标(始终覆盖 --icons)

过滤选项

  • -a--all:显示隐藏和 'dot' 文件
  • -d--list-dirs:将目录列出为常规文件
  • -L--level=(depth):限制递归深度
  • -r--reverse:反转排序顺序
  • -s--sort=(field):按哪个字段排序
  • --group-directories-first:在文件之前列出目录
  • -D--only-dirs:仅列出目录
  • --git-ignore:忽略在 .gitignore 中提到的文件
  • -I--ignore-glob=(globs):忽略文件的 glob 模式(管道分隔)

传递两次 --all 选项,同时显示 ... 目录。

长视图选项

这些选项在运行 --long (-l) 时可用

  • -b--binary:以二进制前缀列出文件大小
  • -B--bytes:以字节为单位列出文件大小,不使用任何前缀
  • -g--group:列出每个文件的组
  • -h--header:为每一列添加标题行
  • -H--links:列出每个文件的硬链接数
  • -i--inode:列出每个文件的inode号
  • -m--modified:使用修改时间戳字段
  • -S--blocks:列出每个文件的文件系统块数
  • -t--time=(field):使用哪个时间戳字段
  • -u--accessed:使用访问时间戳字段
  • -U--created:使用创建时间戳字段
  • -@--extended:列出每个文件的扩展属性和大小
  • --changed:使用修改时间戳字段
  • --git:列出每个文件的Git状态,如果被跟踪或忽略
  • --time-style:如何格式化时间戳
  • --no-permissions:抑制权限字段
  • --octal-permissions:以八进制格式列出每个文件的权限
  • --no-filesize:抑制文件大小字段
  • --no-user:抑制用户字段
  • --no-time:抑制时间字段

一些选项接受参数

  • 有效的 --color 选项是 alwaysautomaticnever
  • 有效的排序字段是 accessedchangedcreatedextensionExtensioninodemodifiednameNamesizetypenone。以大写字母开头的字段在排序时排在小写字母之前。修改字段有别名 datetimenewest,而其相反的是 ageoldest
  • 有效的时间字段是 modifiedchangedaccessedcreated
  • 有效的时间风格是 defaultisolong-isofull-iso

exa 可用于 macOS 和 Linux。有关如何安装 exa 的更多信息,请参阅安装页面

Alpine Linux

在 Alpine Linux 上,启用社区仓库并安装 exa 软件包。

$ apk add exa

Arch Linux

在 Arch 上安装 exa 软件包。

$ pacman -S exa

Android / Termux

在 Android / Termux 上安装 exa 软件包。

$ pkg install exa

Debian

在 Debian 上安装 exa 软件包。目前,exa 在 不稳定 仓库中。

$ apt install exa

Fedora

在 Fedora 上安装 exa 软件包。

$ dnf install exa

Gentoo

在Gentoo上,安装sys-apps/exa软件包。

$ emerge sys-apps/exa

Homebrew

如果你在macOS上使用Homebrew,请安装exa公式。

$ brew install exa

MacPorts

如果你在macOS上使用MacPorts,请安装exa端口。

$ port install exa

Nix

在nixOS上,安装exa软件包。

$ nix-env -i exa

openSUSE

在openSUSE上,安装exa软件包。

$ zypper install exa

Ubuntu

在Ubuntu 20.10(Groovy Gorilla)及更高版本上,安装exa软件包。

$ sudo apt install exa

Void Linux

在Void Linux上,安装exa软件包。

$ xbps-install -S exa

从GitHub手动安装

当发布新版本时,编译的二进制版本会被上传到GitHub。你可以通过下载发布版本,解压它,并将二进制文件复制到你的$PATH目录中,例如/usr/local/bin,来手动安装exa。

更多信息,请参阅手动安装页面

Cargo

如果你已经设置了Rust环境,可以使用cargo install命令

$ cargo install exa

Cargo将构建exa二进制文件,并将其放置在$HOME/.cargo

要构建不带Git支持的版本,运行cargo install --no-default-features exa,如果未安装必需的依赖项,此命令也是可用的。


Rust 1.42+ MIT Licence

exa是用Rust编写的。你需要rustc版本1.42.0或更高版本。安装Rust进行开发的推荐方式是从官方下载页面使用rustup。

安装Rust后,你可以使用Cargo编译exa

$ cargo build
$ cargo test
  • 可以使用just命令运行器来运行一些有用的开发命令,类似于make。运行just --tasks来获取可用信息的概述。

  • 如果你正在为自己编译副本,请确保运行cargo build --releasejust build-release以利用发布模式的优化。将生成的二进制文件复制到你的target/release目录,然后将其复制到你的$PATH目录中。通常/usr/local/bin是一个不错的选择。

  • 要编译和安装手册页,您需要pandoc。使用just man命令可以将Markdown编译成手册页,并将其放置在target/man目录中。要使用它们,将它们复制到man可以读取的目录中。/usr/local/share/man通常是一个不错的选择。

  • exa依赖于libgit2来实现某些功能。如果您无法编译libgit2,可以通过运行以下命令来选择不使用Git支持:cargo build --no-default-features

  • 如果您打算为musl编译,为了使Git功能正常工作,您需要使用vendored-openssl标志。完整的命令是:cargo build --release --target=x86_64-unknown-linux-musl --features vendored-openssl,git

有关更多信息,请参阅从源代码构建页面

使用Vagrant进行测试

exa使用Vagrant来配置用于测试的虚拟机。

像exa这样的程序基本上是系统接口,它们以测试而闻名。尽管内部组件有单元测试,但没有强制要求测试当前用户名、时区、区域设置和目录结构,因此不可能进行完整的端到端测试。(是的,这些测试是值得做的。我曾在很多情况下错过了一些边缘情况。)

最初尝试解决这个问题只是创建一个“尴尬”的测试案例目录,在它上面运行exa,并确保它产生了正确的输出。但是,如果用户的区域设置以不同的方式格式化日期,这些输出也会发生变化。这些可以在代码中模拟,但这会使代码更复杂,更难以阅读和理解。

另一种解决方案是模拟一切:创建一个具有已知状态的虚拟机,并在该虚拟机上运行测试。这正是Vagrant所做的工作。虽然下载和设置需要一些时间,但它为每个人提供了一个相同的发展环境来测试任何明显的回归。

首先,初始化VM

host$ vagrant up

第一个命令下载虚拟机镜像,然后运行我们的配置脚本,该脚本安装Rust和exa的构建时依赖项,配置环境,并生成一些“尴尬”的文件和文件夹作为测试案例。一旦完成这些,您就可以通过SSH登录,并构建和测试。

host$ vagrant ssh
vm$ cd /vagrant
vm$ cargo build
vm$ ./xtests/run
All the tests passed!

当然,拥有标准开发环境的缺点是您会停止注意到该环境中之外出现的错误。因此,Vagrant不是一个必需的开发步骤——如果您愿意,它可以存在,但exa仍然在其他平台上被使用和测试。它仍然可以在它支持的任何目标三联体上构建和编译,无论是否有VM,使用cargo buildcargo test

依赖项

~1–3.5MB
~65K SLoC