【问题标题】:How is `ls` work compare `*`?`ls` 工作如何比较 `*`?
【发布时间】:2016-06-07 11:04:54
【问题描述】:

ls 的结果与* 的区别? 例如: ls | du -sh 将只显示当前目录总大小的一行。 du -sh * 将显示当前目录中每个文件或子目录的大小。

为什么结果不一样?

【问题讨论】:

  • 注意! ls 不会显示带有点的目录,例如:“path/.config
  • @Noproblem * 不会扩展到包含以 . 开头的文件,除非您 shopt -s dotglob

标签: bash terminal ls du


【解决方案1】:

ls | du -sh 只报告. 的大小,因为du 不支持从标准输入读取目录名称。
因此,执行 ls | du -sh 会浪费 ls 并给出与仅运行 du -sh 相同的结果。

【讨论】:

    【解决方案2】:

    du -sh 不从标准输入读取。所以whatever | du -shdu -sh 相同。

    du -sh * 但是扩展为 du -sh file1.txt file2.txt file3.txt 其中 file1.txt, ... 是当前目录中的文件/目录。

    当为du -sh 指定多个文件时,输出将显示每个文件的总和,而du -sh 将仅显示当前目录的总和。

    【讨论】:

      【解决方案3】:

      您可能会考虑使用类似du $(ls) 的方法将ls 的输出作为参数实际传递给du。但这可能不是一个好主意,因为文件名可能很难看(包含空格,甚至换行符等),du 只会被这个混淆。

      考虑将finddu 组合起来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-04
        • 2016-12-12
        • 1970-01-01
        相关资源
        最近更新 更多