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


14

我可以通过Google /找到的最好的man ls是:

ls -l | grep -v '^total'

我有什么想念的ls吗?

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


4
也许效率更高一点ls -l | tail -n+2,其余的我没有答案。
enzotib

我更喜欢enzotib的方法。建议:将其设置为别名并命名lsl。仅3个字母;)哦,ls -lh显示了1.2K样式的大小。
Rinzwind'9

我认为您已经找到了最简单的方法。
罗伯特

Answers:


11

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

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

ls -ld * .*

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


1
-d实际上列出目录而不是条目。
H2ONaCl

@broiyan您可以将ls手册页带到这封信上,ls /也可以考虑一下:可以解释为“ /如果是文件则列出条目,如果是目录则列出目录内容/”。使用-d将删除最后一个条件,并且将始终打印条目而不是目录内容。无论路径是文件还是目录,这都适用。
Lekensteyn

如果可以的话,我会再次投票
dps

7

使用通配符来避免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

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


但是,如果您将多个文件名传递给ls,则此方法将无效。
Sparhawk

3

ls -l *

将为您提供“通常命名的”文件夹内容,而不带total。那可能适合您的需求。不幸的是,它不会给您带dot前缀的文件。如果您使用它,ls -l * .*您将一团糟,因为linux会向上导航树。

请注意,点前缀可能表示文件夹,或者带通配符的含义是上述文件夹,因此它不会帮助您选择带点前缀的常规文件。这似乎是一个不幸的设计决定。


1

$ ls -l [DIRECTORY] | sed 1d
(输出包含文件名)

$ ls -ld [path-to-dir]/*
(输出包含相对路径,但将保留颜色)

$ ls -l [DIRECTORY] | tail -n +2

$ ls -l [DIRECTORY] | awk 'NR>=1'


注意:
如果您有一个名为“ total ....”的文件,则以下操作无效

$ ls -l | grep -v '^total'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.