nolight132/nls
GitHub: nolight132/nls
一款受 Nushell 启发的现代 ls 替代工具,以美观表格展示文件信息,同时在管道与脚本中保持对 GNU ls 的兼容。
Stars: 40 | Forks: 1
# nls
[](https://github.com/nolight132/nls/actions/workflows/ci.yml)
[](./LICENSE)
### neo-ls:带有实用表格的现代版 `ls`
一款快速、跨平台的文件列表工具,在脚本中令人感到熟悉,
并在你的终端中显得十分美观。
`nls` 深受 [Nushell](https://github.com/nushell) 的 `ls` 启发。
A more Nushell-like configuration is available in
## 为什么选择 nls?
`nls` 是一个 **neo-ls**:这是一款现代的文件列表命令,围绕美观的表格、管道与脚本中的兼容性,以及实用的默认设置(如目录大小)而构建,同时不会拖慢常规使用体验。
Nushell 的 `ls` 已经提供了这种体验,但并非所有人都希望更换 shell —— 许多用户对 bash、zsh、fish 或 PowerShell 感到满意,他们只想要 `nu ls` 的表格布局,而不想要 Nushell 的编程模型及随之而来的兼容性妥协。
`nls` 的存在是为了满足那些既想要现代终端工具的视觉体验,又希望保留他们已熟知的工作流的用户。
它可以在 bash、zsh、fish、Nushell、PowerShell 中运行,也可以在 Linux、macOS 或 Windows 上任何能够运行普通 CLI 二进制文件的终端中运行。
## 功能
- 用于交互式终端操作的 Nushell 风格表格
- 列表条目的 Git 状态
- 默认显示目录大小
- 适用于管道、重定向和脚本的快速非 TTY 行为
- 针对常见工作流的类 `ls` 行为
- 路径输入错误时的实用建议
- 可选图标(默认开启)
- 为文件、目录、symlinks、可执行文件、大小和时间戳提供颜色区分
- 用于结构化使用的 JSON 输出
- 兼容 Linux、macOS 和 Windows,并且(极有可能™)支持你期望运行它的任何其他平台
## 安装
请注意,为了正常显示图标,你需要安装 [Nerd Font](https://www.nerdfonts.com/) 并在你的终端中进行配置。
### Arch Linux (AUR)
源码包:
```
yay -S nls
```
预编译二进制文件:
```
yay -S nls-bin
```
### Homebrew
```
brew install nolight132/tap/nls
```
### Go
```
go install github.com/nolight132/nls/cmd/nls@latest
```
### 从源码构建
```
git clone https://github.com/nolight132/nls.git
cd nls
go build -o nls ./cmd/nls
```
Linux/macOS:
```
sudo mv nls /usr/local/bin/
```
Windows PowerShell:
```
go build -o nls.exe ./cmd/nls
```
## 用法
```
nls
nls ~/Downloads
nls -la
nls -lah
nls -R
nls --json
```
对管道友好:
```
nls | wc -l
nls -1 ~/bin | xargs -I{} echo {}
nls --json | jq .
```
## 配置
`nls` 会从操作系统的特定配置目录中读取可选的 TOML 配置文件:
```
$XDG_CONFIG_HOME/nls/config.toml (Linux/macOS, XDG set)
~/.config/nls/config.toml (Linux/macOS, XDG unset)
%APPDATA%\nls\config.toml (Windows)
```
请参阅 [`examples/config.default.toml`](https://github.com/nolight132/nls/blob/main/examples/config.default.toml) 获取带有注释的模板。
优先级从高到低依次为:命令行参数、配置文件、内置默认值。
## 输出行为
| 场景 | 行为 |
| ------------------------- | --------------------------------------------- |
| 交互式终端 | 美观的表格输出 |
| 管道 / 重定向 / 非 TTY | 快速纯文本输出,接近 GNU `ls` 行为 |
| `--json` | 结构化 JSON |
| 常用 `ls` 参数 | 在支持的范围内提供类 GNU 格式 |
`nls` 在常规的管道/非 TTY 用法中旨在表现得像 GNU `ls`,但目前尚未覆盖所有历史边缘情况。
## 参数
常用参数:
| 参数 | 描述 |
| ------------------------ | --------------------------------------- |
| `-a`, `--all` | 显示隐藏条目 |
| `-A`, `--almost-all` | 显示除 `.` 和 `..` 之外的隐藏条目 |
| `-l`, `--long` | 长列表格式 |
| `-h`, `--human-readable` | 人类易读的文件大小 |
| `-1`, `--one` | 每行显示一个条目 |
| `-R`, `--recursive` | 递归列出 |
| `-r`, `--reverse` | 倒序排序 |
| `-t`, `--time` | 按修改时间排序 |
| `-S`, `--size` | 按大小排序 |
| `-X`, `--extension` | 按扩展名排序 |
| `-U`, `--unsorted` | 不进行排序 |
| `-F`, `--classify` | 追加文件类型指示符 |
| `-p`, `--slash` | 为目录追加 `/` |
| `-L`, `--dereference` | 跟随 symlinks |
`nls` 特有参数:
| 参数 | 描述 |
| ------------ | --------------- |
| `--json` | 输出 JSON |
| `--no-icons` | 禁用图标 |
| `--no-color` | 禁用颜色 |
## 图标
图标默认开启。
如果你愿意,可以使用以下命令禁用它们:
```
[icons]
enabled = false
```
## 颜色
`nls` 使用对终端友好的 ANSI 颜色,并在可用时读取 `LS_COLORS`。
默认高亮显示:
- 目录
- symlinks
- 可执行文件
- 大小
- 修改时间戳
## 开发
```
go fmt ./...
go test ./...
go run ./cmd/nls
```
构建:
```
go build -o nls ./cmd/nls
```
## 项目未来规划
未来可能的工具:
- `nfind`
- `ndu`
- `nps`
- `nstat`
目标是打造一套小型的、现代的 coreutils 风格工具集,兼具美观的交互式输出与合理的脚本行为。
## 特别感谢
### Nushell
如果没有 Nushell,就不会有 `nls`。
默认的表格布局、元数据展示、相对时间戳以及整体用户体验中的许多细节,都直接受到 Nushell 的 `ls` 的启发。
本项目的目标不是重新发明那种界面,而是将类似的体验带给那些偏爱传统 shell 和环境(如 Linux、macOS 和 Windows 上的 bash、zsh、fish、PowerShell 以及标准终端)的用户。
如果你喜欢 `nls`,你大概率也会喜欢 Nushell。
https://www.nushell.sh
### bat
`bat` 启发了本项目背后的核心理念。
让 `nls` 成为可能的其中一个想法,就是看到 `bat` 如何在提供显著改善的交互式体验的同时,依然能在管道、脚本和其他非交互式环境中发挥作用。
https://github.com/sharkdp/bat
## 许可证
MITconfig.nushell.toml.
标签:EVTX分析, Python安全, Rust, SOC Prime, 动态分析, 开发工具, 文件管理, 日志审计, 终端应用, 网络流量审计