使用 du 时排除当前文件夹

使用 du 时排除当前文件夹

我正在尝试使用 读取文件夹中文件的大小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

相关内容