尝试在我的服务器(Ubuntu 12.04)上移动内容时,我想使用以下命令了解当前目录的每个子目录的大小以及当前目录的总数du
:
$ du -sm * .
34 A
23 B
1 .
我读到这一点是因为子目录的大小总和(前两行值的总和)大于当前目录及其子目录的大小(最后一行)。在运行 Ubuntu 8.04 的服务器上,这仍然可以像-sm
30 年前我第一次使用该选项时一样工作:
$ cd /var/spool
$ du -sm * .
1 cron
1 cups
0 mail
2 postfix
3 .
造成这种差异的原因是,在 Ubuntu 12.04 机器上我有coreutils
版本 8.13,而在 Ubuntu 8.04 上有coreutils
6.10。进行了一些优化,可能与这,即使在命令行上指定,也不会计算/显示目录两次:在较新的版本上du -sm . .
仅给出一行答案,在旧版本上则给出具有两行相同行的答案。
在 12.04 机器上我可以这样做,du -sm * ; du -sm .
但对我真正感兴趣的目录这样做不是一个选择,因为有 28 个直接子目录,在数百万个文件中拥有超过 1 TB 的数据。在这个目录树上走一次需要几个小时,并且由于目录信息对于操作系统来说似乎很大,无法缓存,因此立即运行第二个需要相同的时间(即,当您在更大的目录上du
运行两次时,我不会产生典型的效果)du -s
第二次子树要快得多)。
我知道我可以将tee
结果放入程序中并在第一列中添加值,但如果有一种方法可以恢复旧的行为,那就太好了du
。
是否有我错过的 coreutils 命令行选项或可以安装的du
替代方案?du
(我也觉得它du
变得更慢了,但这可能是因为我存储和处理的数据量多年来一直在增长。12.04 系统正在运行 Btrfs,这已经减慢了很多事情,因此四处移动)。
答案1
du dir1 dir2
递归报告所有 的磁盘使用情况及其内容dir1
。dir2
文件只计算一次,否则会对磁盘使用情况给出错误的答案。
您可以使用:
du -c dir1 dir2
如果您还想要两者的总磁盘使用量。
所以:
du -sc -- *
将为您提供当前目录中非隐藏文件和目录的磁盘使用情况及其累积大小的摘要。
使用 GNU du
,您还可以执行以下操作:
du -ad1
或者
du -a --max-depth=1
仅报告向下一级的磁盘使用情况(因此.
和子目录),这里使用-a
像您一样报告当前目录中的非目录du *
。
您可以du
使用以下选项强制 GNU 对文件进行多次计数-l
:
du -ls -- * .
效率不高,也不太可能是您真正想要的。
答案2
该选项-c
产生总计,这意味着,在你的用例中,该命令du -smc *
给出的输出几乎(.
被替换为)与以前版本的total
相同:du -sm * .
du
$ du -smc *
34 A
23 B
57 total
即使您的用例与问题中给出的用例不同,我认为该-c
选项无论如何都可以帮助您获得接近您过去的结果。