nolight132/nls

GitHub: nolight132/nls

一款受 Nushell 启发的现代 ls 替代工具,以美观表格展示文件信息,同时在管道与脚本中保持对 GNU ls 的兼容。

Stars: 40 | Forks: 1

# nls [![Build](https://img.shields.io/github/actions/workflow/status/nolight132/nls/ci.yml?branch=main)](https://github.com/nolight132/nls/actions/workflows/ci.yml) [![License](https://img.shields.io/github/license/nolight132/nls)](./LICENSE) ### neo-ls:带有实用表格的现代版 `ls` 一款快速、跨平台的文件列表工具,在脚本中令人感到熟悉, 并在你的终端中显得十分美观。 `nls` 深受 [Nushell](https://github.com/nushell) 的 `ls` 启发。
image
A more Nushell-like configuration is available in config.nushell.toml.
## 为什么选择 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 ## 许可证 MIT
标签:EVTX分析, Python安全, Rust, SOC Prime, 动态分析, 开发工具, 文件管理, 日志审计, 终端应用, 网络流量审计