我正在尝试使用 读取文件夹中文件的大小du -ah
,但输出一直显示当前目录信息(.
)。我想知道是否有一些标志可以与 du 一起使用以避免显示点目录信息?
456K ./EmptyShield.png
320K ./FullShield.png
384K ./HalfShield.png
1.2M ./Heart.ai
1.2M ./Shield.ai
3.4M .
答案1
我不知道有任何这样的选择。我认为最简单的方法是过滤掉与.
在里面POSIX 规范du
我没有发现任何说明这必须是最后一行的内容。但我仍然希望它是最后一行,因为du -ah
在知道 的大小之前必须处理所有其他内容.
。我不是程序员,但我认为如果出于某种原因du -ah
想要.
在 之前打印./whatever…
,那么它必须故意推迟打印./whatever…
并在打印 之前处理它.
;这种推迟将是额外的工作。所以我很想假设总是在最后一行,因为从任何实现的角度来看这都是自然的,即使规范对此只字未提。在这件事上.
我从未遇到过让我感到惊讶的事情。du
过滤掉最后一行:
du -ah | sed '$d'
# or
du -ah | head -n -1 # this usage of head is not portable though
请注意,这不会改变du -ah
或打印的内容。要使其du
不显示该行,您需要另一种方法。见下文。
.
当 没有 操作数 时是默认值du
。您的du -ah
相当于du -ah .
。
要使工具省略,.
您不能指定.
。而是指定里面的所有文件./
:
du -ah ./* ./.[!.]* ./..?*
或者如果你的 shell 支持括号扩展:
du -ah ./{,.[!.],..?}*
这种方法存在一些问题:
无与伦比的球体可能会保持字面意思并导致
no such file or directory
错误;但不是致命的。匹配次数过多会导致
argument list too long
錯誤;致命的。这规格状态:
在一个文件操作数下多次出现且链接数大于 1 的文件应仅被计数并写入一个条目。对于链接数不大于 1 的文件,是否只被计数并写入一次,还是每次出现都计数并写入,由实现定义。对于在一个文件操作数下出现的文件,是否被计入其他文件操作数,由实现定义。
这意味着,如果存在硬链接文件,
.
那么您du -ah
将只计算并打印其中的一个文件(“一个文件操作数下多次出现”的情况)。我du -ah ./* ./.[!.]* ./..?*
可能会也可能不会打印所有文件(“一个文件操作数下出现的文件被计入其他文件操作数”的情况)。即使您du
只打印其中一个文件,也可能与来自的文件不同du -ah
(请参阅下一个要点)。模式的顺序会影响输出。
例如,如果
A/foo
和.B/bar
是同一个文件,du -ah
那么打印
A/foo
并考虑的大小A
,它将不会打印.B/bar
,并且的大小B
将就像bar
不存在一样;异或它会打印
.B/bar
并说明情况.B
,不会打印A/foo
也不会说明情况A
。
du -ah ./* ./.[!.]* ./..?*
可能会同时打印A/foo
和.B/bar
(参见上一个要点)。如果只打印一个,那是A/foo
因为./*
(matching./A
) 在./.[!.]*
(matching./.B
) 之前。以相反的顺序指定模式将使工具打印.B/bar
。