linux - 创建 Linux 别名以仅列出目录

标签 linux tabs alias multiple-columns ksh

我想为 KSH 创建一个名为 dir 的别名,它将仅显示包含许多文件和目录的杂乱目录中的子目录。

我可以输出目录的单列列表,但在将单列列表转换为多列时遇到问题。

我希望它根据最长字符串的长度和终端窗口的宽度自动确定要使用的列数,就像 ls 命令自动创建选项卡式列一样。

假设我在终端输入以下内容,得到当前目录中所有目录的列表:

ls -1Fa | grep /

当我将此输出通过管道传输到 column -t 时,它似乎没有任何效果...我在单列中获得了 54 个目录的列表。我还尝试了其他管道到 column -t -s $'\t'column -t -s $'\n' 的常见建议,但它总是导致单个列表输出。我查看了手册页并尝试了所有选项,但无法生成类似于 ls 的输出。

我还尝试通过以下方式将输出通过管道传递给 pr:

alias dir="ls -1Fa | grep / | pr -T -w $COLUMNS -6"

不幸的是,这将始终输出 6 列,如果终端窗口相当窄(即 $COLUMNS 小到 50),那么长目录名称将在下一列的开头被截断。

有人可以回答为什么 column 没有将列表输出到列中,或者有人使用其他工具(例如 sed、awk、perl)有更好的解决方案吗?

感谢您的帮助!

最佳答案

真的,你只需要

alias dir='ls -d */ .*/'

结尾的斜杠指示 ksh 仅在 glob 扩展中包含目录。您还可以了解如何将 ls 格式化为列。

您的问题的答案是您为 column 使用了错误的选项:

ls -1d */ .*/ | column -c $(tput cols) 

column -t 漂亮地打印输出,来自

1
a b
foobar baz

进入

1
a       b
foobar  baz

参见 column man page

关于linux - 创建 Linux 别名以仅列出目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34534355/

相关文章:

java - 错误 : JAVA_HOME is not defined correctly

objective-c - 希望将选项卡引入基于文档的应用程序,想法?

c++ - 如何正确地将输出组织成列?

linux - mac 如何在电脑中保存别名

php - 与 PHP 一起使用的 Apache Alias 或 ScriptAlias 不起作用

Python 程序可能导致文件系统错误

linux - Iostat是否显示linux md raid的正确输出

linux - 是否有一个 linux 程序可以连续运行另一个程序而不会闪烁?

tabs - 无法在 Zsh 中将向后 TAB 作为 Shift-TAB

git - "git checkout main_branch; git merge topic_branch"的别名?