有没有办法让Thunar显示“递归”文件大小?

我正在使用Thunar 1.6.3,目前当我查看一堆文件夹时,它看起来像这样:

Folder 1 8,2 kB Folder 2 4,1 kB Folder 3 4,1 kB Folder 4 0 kB 

我不确定这些“大小”数字来自哪里,但我确定它们没有反映文件夹中所有内容的实际大小,因为当我右键单击并选择“属性”文件夹时(所有这些文件夹只有千字节)在大小)加起来超过100 Gb。

问题

  • 为什么Thunar,就像12.04和14.04上的命令行一样,显示像4K这样的文件夹大小? 这个数字是什么意思?
  • 有没有办法在终端,Thunar或任何其他文件管理器中显示复合大小,即文件夹和所有内容的计算递归大小? (注意:我不是在寻找shell脚本解决方案)。

我应该解释一下Linux文件系统结构来解释这一点。 大多数linux文件系统都做类似的事情,但我假设是ext4,这是当前的默认设置。

文件系统结构

  • inode是文件系统理解为逻辑单元的基本块。
  • 目录inode包含对其他inode的引用。
  • 如果文件必须以非连续方式存储,则文件inode包含元数据,实际数据和对延续块的引用。

链接

  • Ext4支持两种链接。 硬而软。
  • 硬链接是直接引用inode。 每个文件至少有一个硬链接,来自它所属的目录。
  • 由于目录只是一个inode,包含有关inode引用组的信息,因此它可以引用自身或父类。 换句话说,文件夹可以是同一文件夹的子文件夹和父文件夹。

好吧,这可能会让人感到困惑。 让我解释。 假设您有三个文件夹,A,B,C,如下所示。

 C is in B. B is in A. 

现在,有趣的部分是,C可以指向与A相同的inode,创建有时称为循环引用循环的东西。 如果你尝试递归,你会遇到一个永无止境的循环。

  • 软链接是普通文件,用于记录目标位置的目录路径。 它们只是在文件系统上标记,而不是一行文本,它们应该被解释为指向其他位置的链接。 例如,Nautilus在您使用“创建链接”/“此处链接”选项时会创建软链接。

所以呢?

因此,尝试递归计算大小有其怪癖。 默认情况下尝试递归计算大小是个坏主意。 但是,我所知道的所有体面文件管理器的属性对话框都显示递归计算的总大小,因为这是普通用户所期望的。

Windows有没有问题?

实际上,Windows使用一种名为NTFS的不同文件系统格式,它维护所有文件及其大小的列表。 所以它总能轻松地告诉总尺寸。

那为什么我们不使用NTFS?

它不支持Unix的权限概念(分别为所有者,组和Universe的rwx ),并且这个原因使它不适合用作Linux文件系统。 Ext4带来了很多东西,这个小小的不便对许多人来说无关紧要。

好的。 给我我需要的尺寸。

你试过du吗?

du如何工作?

du代表磁盘使用情况。 它实际上计算inode块,注意不要重复计算它们。 添加尺寸,您就拥有了总尺寸。

TL; DR

使用du -hs 查找磁盘上文件夹的实际大小。 阅读man du了解更多信息。

thunar顶级菜单中,转到编辑>配置自定义操作,添加新的自定义操作:

  1. 基本选项卡:任何名称[例如 文件夹(文件大小),命令du -h -c %N | grep total | zenity --text-info du -h -c %N | grep total | zenity --text-info du -h -c %N | grep total | zenity --text-infodu -chs %N | zenity --text-info du -chs %N | zenity --text-info所选文件夹的du -chs %N | zenity --text-info或/和文件大小,后跟总大小。
  2. “外观条件”选项卡:选中所有框。

我在http://crunchbang.org找到了这个解决方案