使用 bash 列出所有隐藏子目录的大小-奇怪的通配符行为

使用 bash 列出所有隐藏子目录的大小-奇怪的通配符行为

我想显示一些关于隐藏子目录的信息,但注意到一种我不理解的通配符行为。

ls .*展开到 pwd、父目录路径和所有隐藏的子目录路径,然后列出所有这些目录的内容。这样就好了。

du -s .*另一方面,似乎只会扩展到 pwd 和父目录路径,因为它只列出了这些的大小。我不明白为什么它的行为与 的行为不同ls

使用du -s .[^.]*解决了实际问题,因为它列出了所有隐藏目录的大小。我知道这有效,但为什么不起作用du -s .*

答案1

我将重新措辞我的答案,因为我以某种方式误读了这个问题。

该参数-s总结了目录的大小,并且恰好包括了其下所有目录的大小。它们不会显示在输出中。

由于通配符.*与当前目录 ( .) 匹配,因此所有子目录都会被抑制du

但事情没那么简单。只有当du的参数中父文件夹位于其子文件夹之前时,才会发生这种情况;然后不会显示子文件夹。

您的主文件夹中可能存在桌面、文档和下载文件夹。在您的主文件夹中,尝试运行du -s D*。这应该会显示这三个文件夹的大小。现在,尝试du -s . D*运行du -s D* .

由于通配符.*显示在文件夹.之前.hidden,因此它们没有机会出现。

相关内容