du命令不解析隐藏目录


25

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

du -sh dir_name

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

Answers:


13

实际上,这是证明:

mkdir .test
echo "hi" > .test/appo
du -a
4       ./.test/appo
8       ./.test
12      .

-a选项用于显式显示要计数的文件。

您正在使用du *吗?


3
+1 for... you maybe using "du *" ?
sehe 2011年

2
我没有使用“ du *”。我忘记在问题中提到我需要总摘要。因此,如果我在du中同时使用-a和-s,则会收到一条错误消息,提示“ du:不能同时汇总和显示所有条目”。这是一个问题。另一件事是,即使使用du -ai,我也只能看到第一级文件。即无法看到隐藏目录中的文件。
Talespin_Kit 2011年

1
我只是添加了-a以显示所有正在计数的文件,只是不添加该标志,它仅影响显示,而不影响总数。我向您展示了一个反例,而是计算了隐藏目录。
stivlo 2011年

1
现在我发现了问题。问题是隐藏目录是一个符号链接,因此我不得不使用“ du -Lsh dir_name”。谢谢。
Talespin_Kit 2011年

1
啊,我明白了,很高兴你找到了,干杯。
stivlo 2011年

53

此命令显示隐藏目录的摘要大小

du -hs .[^.]*


1
这正是我一直在寻找的东西,谢谢:)
Nikana Reklawyks

这是正确的解决方案
3pns

如果您能解释一下其背后的魔力,那将是非常棒的。这将有助于形成一个包括隐藏文件和非隐藏文件及目录的答案。
kumetix

13

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

$ du -hs $(ls -A)
0   test
0   .test

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

范例:

$ touch test
$ touch .test
$ echo *
test
$ echo .* *
. .. .test test
$ du -hs .* *
4,0K    .
1,8G    ..

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


11

仅供参考,为了估算各种目录占用的空间,使用ncdu更好

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


1
请修改您的答案,以说明为什么您相信ncdu会“更好”。链接页面除了是基于ncurses的版本外,并没有说什么du。除了更高级的显示方法外,没有任何功能差异的明显迹象。
Dave Sherohman 2011年

我认为动态调整查询的能力是一个巨大的好处。我可以在〜上运行ncdu,了解哪些目录使用了最多的空间,然后直接进入这些目录。它还为您提供了d删除目录的绑定,因此您可以直接从界面中进行清理。
user88974 '17

5

它有,但没有。例:

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

du -sh /home/*
2.6G    /home/user

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

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

原因是:

du -sh /home/user/.rvm/
1.9G    /home/user/.rvm/

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

我花了一些时间才弄清楚,而且正如shadyabhi建议的那样,如果我使用过ncdu,那将是显而易见的。



1

find -maxdepth 1 -exec du -sh "{}" \; | sort -h

这给您:

  • 隐藏文件/目录的大小
  • 未隐藏文件/目录的大小
  • 当前目录的总大小

它还对输出进行排序,以便于查看最大的输出。我还在~/.bash_aliases文件中将此别名作为别名。

alias big='find -maxdepth 1 -exec du -sh "{}" \; | sort -h'
alias sbig='sudo find -maxdepth 1 -exec du -sh "{}" \; | sort -h'

现在,只要需要sudo权限,我就可以执行big查找目录中最大的目录sbig


0
du -ahd1 | sort -hr | head -10

以下是对-doption 的描述du --help

-d,--max-depth = N仅在目录参数低于命令行参数N个或更少级别时才显示目录(或文件,带有--all)的总数;--max-depth = 0与--summarize相同


尽管这可能有助于解决问题,但并不能解释为什么和/或如何解决该问题。提供这种额外的环境将大大提高其长期教育价值。请编辑您的答案以添加解释,包括适用的限制和假设。谢谢。
fixer1234 '18

0

此命令将帮助您检查磁盘使用情况是否进入目录并执行以下操作。
“ du -sch。[!。] * * | sort -h”

这是有关如何计算特定目录的磁盘使用量的演示。我创建了一个名为Du_sh的目录,并在其中创建了两个文件(一个隐藏10 MB,通常20 MB)。

nikhil@debian:~$ mkdir Du_sh nikhil@debian:~$ cd Du_sh/ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=.10MB bs=1024 count=10240 10240+0 records in 10240+0 records out 10485760 bytes (10 MB, 10 MiB) copied, 0.0299941 s, 350 MB/s nikhil@debian:~/Du_sh$ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=20MB bs=2048 count=10240 10240+0 records in 10240+0 records out 20971520 bytes (21 MB, 20 MiB) copied, 0.0342258 s, 613 MB/s nikhil@debian:~/Du_sh$ du -sch .[!.]* * 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$ du -sch .[!.]* * | sort -h 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.