我通过 Google/ 找到的最好的信息man ls
是:
ls -l | grep -v '^total'
我在标志中遗漏了什么东西吗ls
?
另外,为什么无论 -h 标志如何,总大小都是以 kb 为单位?划掉它,看起来是这样,不确定我当时看到了什么。
答案1
查看源代码coreutils
,我发现在使用选项total
时始终会显示-l
目录。
使用-d
选项列出条目而不是目录内容会隐藏total
。但是,如果您在不带参数的情况下(或在目录上)运行该命令,它只会显示目录而不显示其内容。因此,您需要通配符。*
匹配所有文件并.*
匹配隐藏文件(与选项相对应-a
):
ls -ld * .*
至于-h
选项,对我来说是有用的。1118360 字节显示为 1.1M。小于 1024 的文件以字节为单位显示。
答案2
使用通配符来避免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
。
答案3
ls -l *
将为您提供不带 的“正常命名”文件夹内容total
。这可能适合您的需求。不幸的是,它不会为您提供dot
带前缀的文件。如果您使用,ls -l * .*
您将会陷入混乱,因为 linux 会向上导航树。
请注意,点前缀可能表示文件夹,或者使用通配符表示上面的文件夹,因此它无法帮助您选择以点为前缀的常规文件。这似乎是一个不幸的设计决定。
答案4
回答您的确切问题是,ls -1A .
它显示文件、目录和隐藏文件/目录,不使用任何管道或外部工具(grep/tr/cut..),并且不依赖于打开或关闭任何 shell 通配符选项(例如 extglob、globstar 或 nullglob)。我已经对其进行了测试以验证该语句。
-1 list one file per line. Avoid '\n' with -q or -b
-A, --almost-all do not list implied . and ..
示例输出:
user@host:/dir$ ls -1A .
temp
terraform
.test
tor
torrent-stuff
.Trash-1000
virtual_appliance
visualblind
vpn-ipv4.txt
vpn-ipv6.txt
zztestfile
.zztestfile2
附注一下,下面是我在 .bash_aliases 中保存的与列出目录/文件相关的内容:
# ls directories
alias lsd2='ls -d */'
alias lsd3='ls -p . | grep -E "/$" | tr -d "/"'
alias lsd4='ls -lA | grep -E "^d"'
alias lsd5='ls -pv . | grep -E "/$" | tr -d "/"'
alias lsd='ls -lAd */'
# ls files
alias lsf='ls -pA | grep -vE "/$"'
alias lsf2='ls -p | grep -v "/"'
alias lsf3='ls -p . | grep "/" | tr -d "/"'
alias lsf4='ls -lA | grep -vE "^d"'
# ls normal
alias lsnormal='ls -lAh1d *'
alias lsnormal2='ls -1 .'