Bash:获取修改后的 `ls` 类输出(每行多个条目)

标签 bash multiple-columns ls

当您在命令行上调用 ls 时没有其他选项,您每行会得到多个条目。

人为的例子:

$ ls mydir/*.tar.gz
mydir/foo.tar.gz        mydir/bar.tar.gz        mydir/baz.tar.gz

但是如果你想以某种方式修改输出,你每行得到一个条目:

$ ls mydir/*.tar.gz | sed "s/\.tar\.gz//g"
mydir/foo
mydir/bar
mydir/baz

有很多条目,这变得很麻烦——我想要多个对齐的列。

我试图按照 find mydir -name "*.tar.gz"-printf ...... -exec .. .,甚至(yuk!)for file in $(find ...),但是我能想到的任何东西都非常不优雅(想想计数器变量,取模和只是猜测终端宽度...)。

是否有一些优雅的方法可以在多列输出中获取几个文件名,比如使用 vanilla ls,在修改它们之后(通过例如 sedbasename 等)?

最佳答案

(令人惊讶的命名)column 命令将执行您想要的操作。

ls | column -c 80

这将在 80 宽显示器的列中显示输出。您可能需要等待输出,因为它必须先计算出项目的宽度,然后才能格式化任何内容。

它适用于任何命令。

您可以使用 COLUMNS 环境变量找到您的列宽(这可能取决于您的 shell - 输入 set 以查看变量列表并计算出来),或使用 tput cols 命令。

关于Bash:获取修改后的 `ls` 类输出(每行多个条目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28966423/

相关文章:

bash - 在 bash 中的复合命令中设置变量失败(命令组)

bash - 如何在 Bash 脚本中执行 Zsh shell 命令

regex - grep 没有按预期运行

CSS 固定 div。避免不必要的重叠

python - paramiko ls 有几个文件输出被截断

linux - 如何仅显示来自 aws s3 ls 命令的文件?

linux - 将目录/文件输入文本文件,然后显示早于特定日期的文件

linux - 想要创建一个接受带参数的函数的 bash 别名

java - 如何在 Nebula GridTable 中选择列

css - 使列靠得更近