du 命令不解析隐藏目录

Tal*_*Kit 65 linux

我想使用以下命令估计目录使用的磁盘空间量。

du -sh dir_name
Run Code Online (Sandbox Code Playgroud)

它不计算隐藏目录。在 du 的手册页中没有关于它的信息。如何计算目录(包括隐藏文件)使用的磁盘空间量。

小智 159

此命令使用正则表达式显示隐藏目录的汇总大小:

du -hs .[^.]*
Run Code Online (Sandbox Code Playgroud)

  • 似乎`du -hs .[^.]* *` 将同时包含点文件/目录和非隐藏目录。我不知道是否有不正确的情况。 (4认同)
  • Glob 表达式:取第一个点但不取第二个点 => 不要去找你的父母。找到你的(隐藏/玩躲猫猫的)孩子,然后向我报告他们的大小。 (2认同)
  • 如果你疯狂到有像“..tralala”这样的文件名,你也必须包含它们 `du -hs ..[^.]* .[^.]* *` (2认同)

小智 36

正确的命令是: du -hs $(ls -A)

$ du -hs $(ls -A)
0   test
0   .test
Run Code Online (Sandbox Code Playgroud)

du -hs .* *,如另一个答案中所述,如果要列出所有文件和子目录(包括隐藏的),则不正确。

例子 :

$ touch test
$ touch .test
$ echo *
test
$ echo .* *
. .. .test test
$ du -hs .* *
4,0K    .
1,8G    ..
Run Code Online (Sandbox Code Playgroud)

为什么du会有这样的行为?因为您使用的-s是总结结果并且所有文件和子目录都是其子目录,.所以du -hs没有列出它们!

  • 这里唯一好的答案。 (3认同)
  • 对于带空格的文件名,此命令将产生错误 (2认同)
  • 这给出了隐藏 (.*) 和非隐藏的 du。此外,它忽略了父级。指挥准确。 (2认同)
  • 我建议使用基于“ls -A”的替代解决方案,但这次使用 xargs 以确保正确处理带有空格的文件名(请参阅下面我的其他答案) (2认同)

sti*_*vlo 23

确实如此,证据如下:

mkdir .test
echo "hi" > .test/appo
du -a
4       ./.test/appo
8       ./.test
12      .
Run Code Online (Sandbox Code Playgroud)

-a选项用于明确显示哪些文件被计算在内。

你在用du *吗?

  • +1 为`...您可能使用“du *”?` (9认同)
  • 现在我发现了问题。问题是隐藏目录是一个符号链接,所以我不得不使用“du -Lsh dir_name”。谢谢。 (3认同)
  • 我没有使用“du *”。我忘了在问题中提到我需要总摘要摘要。因此,如果我在 du 中同时使用 -a 和 -s,则会收到一条错误消息,提示“du:不能同时汇总和显示所有条目”。这是一个问题。另一件事是我即使使用 du -ai 也只能看到第一级文件。即无法看到隐藏目录中的文件。 (2认同)
  • 啊,我明白了,很高兴你找到了,干杯。 (2认同)

Abh*_*ogi 13

仅供参考,为了估计各种目录占用的大小,使用ncdu会更好

您可以在不同目录之间的 ncurses GUI 中导航,它将显示每个目录的大小。如果我正在使用 du,我将不得不为我想要检查的每个目录执行 du 命令,这可能很麻烦。您也可以在 ncurses GUI 中根据占用的大小对目录进行排序。

  • 请编辑您的答案以表明**为什么**您认为 ncdu“更好”。链接的页面除了说它是“du”的基于 ncurses 的版本之外,并没有真正说明任何内容。除了更奇特的显示方法之外,没有明显的迹象表明任何功能差异。 (2认同)
  • 我认为动态调整查询的能力是一个巨大的好处。我可以在 ~ 上运行 ncdu,了解哪些目录使用的空间最多,然后直接深入研究这些目录。它还为您提供了删除目录的“d”绑定,因此您可以直接从界面进行清理。 (2认同)

laj*_*rre 8

ls -A用于列出文件和xargs操作输出的解决方案:

ls -A | xargs -I {} du -sh {}

此解决方案可确保正确处理带空格的文件名。

  • 使用 `-s` 而不是 `-sh` 以确保“560K”排序不会高于“2.0G”。 (2认同)

小智 6

它有,也没有。例子:

在主目录中:(仅存在一个用户)

du -sh /home/*
2.6G    /home/user
Run Code Online (Sandbox Code Playgroud)

在用户目录中:(总和之间的巨大差异)

du -sh *
61M     bin
2.0M    dump-20130124104823.tar.gz
651M    public_html
472K    twitter-2.0.0.gem
11M     wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2
Run Code Online (Sandbox Code Playgroud)

原因是:

du -sh /home/user/.rvm/
1.9G    /home/user/.rvm/
Run Code Online (Sandbox Code Playgroud)

du 将在下降到子目录时计算隐藏目录,但在当前目录中 * 根本不匹配 .directory_name 模式,因此将省略当前目录隐藏元素。

我花了一些时间才弄明白,正如 shadyabhi 建议的那样,如果我使用了 ncdu,那就很明显了。


luo*_*990 5

du -ahd1 | sort -hr | head -10
Run Code Online (Sandbox Code Playgroud)

以下是-d选项的说明du --help

-d, --max-depth=N 打印目录(或文件,使用 --all)的总数,仅当它低于命令行参数 N 或更少级别时;--max-depth=0 与 --summarize 相同