有没有办法强制 du 报告目录大小(递归),仅包括文件大小?

有没有办法强制 du 报告目录大小(递归),仅包括文件大小?

假设我创建一个目录test/,其中有两个文件(test/a, )和一个带有文件的test/b内部目录,如下所示:test/ctest/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

希望这对您有帮助?

相关内容