从 ls -l 的输出中删除“total <size>”行的最简单方法是什么?

Tom*_*Tom 15 ls

我能通过谷歌/找到的最好的man ls是:

ls -l | grep -v '^total'
Run Code Online (Sandbox Code Playgroud)

我在标志中遗漏了ls什么吗?

另外,为什么总大小以 kb 为单位,而不管 -h 标志如何? 从头开始,似乎确实如此,不确定我当时看到了什么。

Lek*_*eyn 15

查看 的源代码coreutils,我发现在目录total使用-l选项时将始终显示。

使用-d选项列出条目而不是目录内容隐藏total。但是如果你不带参数(或在目录上)运行它,它只会显示目录而不是它的内容。因此,您需要通配符。*匹配所有文件并.*匹配隐藏文件(与-a选项对应):

ls -ld * .*
Run Code Online (Sandbox Code Playgroud)

至于-h选项,它对我有用。1118360 字节显示为 1.1M。小于 1024 的文件以字节为单位显示。


Mec*_*ail 8

使用通配符来避免ls运行目录列表是次优的,因为它会阻止您使用ls诸如--almost-all.

就像Enzotib 的建议一样,删除它的最简单方法是通过管道将其tail切掉第一行。但是,ls会检测到它的输出是管道而不是交互式,并以不需要的方式更改其默认值。因此,为了使其健壮,您还应该添加一些选项:

  • --color=always: 继续显示颜色
  • --hide-control-chars: 打印?文件名代替可能会弄乱控制台输出的控制字符

我有一个脚本~/bin/l(您也可以在 中使用 Bash 别名~/.bash_aliases):

#!/bin/bash
ls -l --color=always --hide-control-chars "$@" | tail --lines=+2
Run Code Online (Sandbox Code Playgroud)

您还可以ls默认添加任何其他您想要的选项,例如--group-directories-first --time-style='+%FT%T.%N%:::z' --indicator-style=slash.