我可以在 ls 列表中截断长文件名吗

Har*_*ton 10 display-settings filenames

我有许多名称很长的文件。请问,有没有办法使用 ls -C 并截断文件名以获得更多列以获取整体视图?

或者有没有更好的方法来获得紧凑的列表?

Sté*_*las 10

你可以这样做:

ls | cut -c1-20 | columns -W "${COLUMNS:-80}"
Run Code Online (Sandbox Code Playgroud)

列示例

(这columnss来自 GNU autogen 的)。或者:

ls | cut -c1-20 | column -c"${COLUMNS:-80}"
Run Code Online (Sandbox Code Playgroud)

列示例 使用column对BSD系统或如发现bsdmainutils在Debian或其衍生物。

zsh 还支持按列打印内容,因此您可以定义如下函数:

setopt extendedglob
c() print -rC$[COLUMNS/(($1)+2)] -- "${(M)@[2,-1]##?(#c0,$[$1])}"
Run Code Online (Sandbox Code Playgroud)

并将其用作:

c 20 *.txt
Run Code Online (Sandbox Code Playgroud)

在列中打印列表 txt 文件,截断为 20 个字符。

为了让它更疯狂,你可以添加:

command_not_found_handler() {(($1)) && c "$@"}
Run Code Online (Sandbox Code Playgroud)

这样,您还可以执行以下操作:

20 *
Run Code Online (Sandbox Code Playgroud)

甚至:

8+8 *
Run Code Online (Sandbox Code Playgroud)

zsh 示例