`ls` 的工作与 `*` 相比如何?

How is `ls` work compare `*`?

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

为什么结果不一样?

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

相同的结果

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

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

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

您可能会考虑像 du $(ls) 这样的东西将 ls 的输出作为参数实际传递给 du。但这可能不是一个好主意,因为文件名可能非常丑陋(包含空格,甚至换行符等),du 只会因此而混淆。

考虑合并 finddu