假设我创建一个目录test/
,其中有两个文件(test/a
, )和一个带有文件的test/b
内部目录,如下所示:test/c
test/c/d
mkdir test
cd test
touch a
echo 1 > a
touch b
echo 1 > b
mkdir c
cd c
touch d
echo 1 > d
cd ../..
du test -ab
最后一行(运行)的输出du
是:
2 test/a
4096 test/c
2 test/b
8196 test
目录的大小为 8196(而不是 6,后者为:文件 a 的大小 + 文件 b 的大小 + 文件 c/d 的大小)。这是因为,据我了解,du 包括目录本身的大小(因为目录只是一种特殊的文件,其中记录了文件条目)。
我不想这样。我想看看所有文件在目录中(Windows 资源管理器报告目录大小的方式)。因此,在此示例中,结果应为:
2 test/a
2 test/c
2 test/b
6 test
更重要的是,我真正想要的是最后一行:目录中所有文件的大小总和(递归)。
但是我已经尝试了 du 的所有选项,似乎没有办法做到这一点。有什么办法吗?
答案1
$ ls -goR | awk '{sum += $3} END{print sum}'
16992
编辑。要排除目录,请使用grep
$ ls -goR | grep -v ^d | awk '{sum += $3} END{print sum}'
6
答案2
如果你只想要文件的大小(不包括目录占用的空间),你可以这样做
$ find test/ -type f -print0 | xargs -0 du -scb | awk '/total/{k+=$1}END{print k" total"}'
6 total
答案3
您指定需要目录内文件的摘要,但示例输出包含特定文件。
有关包含特定文件的详细信息,请尝试以下操作:
$ find test/ -exec du -s {} \;
20 test/
4 test/b
4 test/a
8 test/c
4 test/c/d
如果只想了解每个目录的摘要,请尝试以下操作:
$ find test/ -type d -exec du -s {} \;
20 test/
8 test/c
希望这对您有帮助?