Linux 上如何仅获取一级子目录的大小?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 上如何仅获取一级子目录的大小?相关的知识,希望对你有一定的参考价值。

参考技术A

要获取 Linux 上给定目录的一级子目录(包括其子目录)的大小,请使用以下命令格式。

$ du -h --max-depth=1 /home/daygeek/Documents/

3.2G    /home/daygeek/Documents/drive-magesh

4.0K    /home/daygeek/Documents/daygeek

756K    /home/daygeek/Documents/Bank_Details

9.6G    /home/daygeek/Documents/drive-2daygeek

6.3G    /home/daygeek/Documents/Thanu_Photos

20G    /home/daygeek/Documents/

 在 du 命令输出中获得总计

如果要在 du 命令输出中获得总计,获取一级子目录大小请使用以下 du 命令格式。

$ du -hsc /home/daygeek/Documents/* | sort -rh | head -10

20G    total

如何获取目录C ++的磁盘大小

【中文标题】如何获取目录C ++的磁盘大小【英文标题】:How to get size on disk of a directory C++ 【发布时间】:2020-08-02 05:11:37 【问题描述】:

如何使用 C++ 代码而不是文件大小获取磁盘大小?

我正在尝试获取目录(文件夹)在磁盘上的大小,并且将文件大小相加仅给出实际文件大小。我需要的是磁盘上的大小,有什么办法得到吗?

谢谢

#include <iostream> 
using namespace std;
#include <filesystem>
using namespace std::filesystem;
int main(size_t argc, char* argv[])

   if (argc == 1) 
        void rscan3(path const&, unsigned i = 0);
        rscan3(".");

    

void rscan3(path const& f, unsigned i) 
    string indent(i, ' ');
    uintmax_t size = 0;
    for (auto d : directory_iterator(f)) 

        size += d.file_size();
        cout << indent << "Folder = " << absolute(f).string() << " SIZE: " << size << endl;
        if (is_directory(d.status())) 
            rscan3(d.path(), i + 2);

    

【问题讨论】:

空目录大小为 0 字节。 (你可以在windows上做实验,我不确定其他系统)......我认为一个目录的整个大小只是它的文件大小的总和。 这取决于系统。在 Linux 上,有一个“真实”目录大小,即目录本身(即文件列表)占用的大小,以及“总”目录大小,它是 on-disk 大小的总和的内容。磁盘文件大小是实际占用的大小,并且通常大于“表观”文件大小,因为空间是以块为单位分配的(但如果使用文件系统级压缩,也可能更小)。 @GhaziMajdoub “空目录大小为 0 字节。” - 这显然错了。即使是一个空目录必须作为其父目录中的一个条目在磁盘上占用一些空间 - 目录的名称会占用空间,并且根据文件系统的不同,它可能会占用比名称更多的空间。零字节不可能是正确的。 @JesperJuhl 我创建了一个空目录并检查了大小(在属性上):它说 0 字节。但是,显然,它肯定必须有一个大小。我同意。 (现在,考虑它占用的几个字节有多大用处?) @GhaziMajdoub 不过,这不仅仅是“几个字节”。文件系统条目占用的空间是块大小的倍数——现在通常是 4k。 【参考方案1】:

由于您在 cmets 中指定了您在询问 Windows:

文件由文件索引或文件表中的条目指示(MFT 表示 NTFS,FAT 表示 FAT 文件系统)。该表位于物理文件系统(例如硬盘)的特殊位置,并保存每个文件的地址和元数据。文件大小是文件实际占用的空间量;这可以是零或任何更大的大小。当一个文件没有数据时,它是空的(size = 0)。

在 Windows 文件系统中,目录的大小是其中所有文件(以及子文件夹中的文件)的总和。因此,空目录的大小为零。

Source: Why does an empty folder have zero bytes on Windows?

STL filesystem::file_size 仅适用于文件,它会引发目录异常:filesystem error: cannot get file size: Is a directory [dir]。为什么?因为目录只是文件索引或表中的一个条目。

在 Windows 上,当您检查包含许多子目录/文件的目录时,您可能会注意到属性上报告的“磁盘大小”逐渐增加;这推断系统正在通过子目录/文件递归迭代以汇总所有文件大小...您可以做一个实验来检查完整大小是否真的等于所有单个文件的总和(不包括目录)。

【讨论】:

以上是关于Linux 上如何仅获取一级子目录的大小?的主要内容,如果未能解决你的问题,请参考以下文章

PHP获取文件绝对路径的代码(上一级目录)

如何获取目录C ++的磁盘大小

如何仅在 C 中列出第一级目录?

python获取上一级与上上一级目录的写法

Linux 常用命令

linux基础