档案内的磁盘使用情况,例如 ncdu

a3n*_*3nm 5 software-rec compression ncurses disk-usage

我非常喜欢使用ncdu实用程序来了解目录中的空间使用情况。

但是,我有一个用例,我尝试选择要备份的文件夹和不备份的文件夹,并且备份将被压缩(作为 .tar.xz 存档,但我认为 .tar.gz 会产生相同的结果)结果符合我的想法)。因此,直观上,我不太关心大但压缩效果好的文件(例如,电子邮件存档),而我更关心相对较小但根本无法压缩的文件(例如,JPG 图片)。我想查看按压缩大小排序的文件和文件夹,而不是按实际未压缩大小排序。

一个自然的解决方案是压缩所有文件,然后使用类似的工具对存档ncdu进行操作,告诉我文件夹如何占用存档中的空间。

有这样的实用工具吗?

我对 GUI 程序很满意(尽管我更喜欢基于文本的程序),并且我对仅适用于不同压缩算法的方法也很满意,因为我认为它们仍然会产生有用的结果(例如,复制文件系统中的层次结构)具有内置压缩/重复数据删除功能)。

Vol*_*gel 4

可以ncdu自己用啊!

这显示了文件的未压缩大小。
如果您说您关心,即许多不可压缩的文件,它应该很好地反映您需要的内容:


为了使文件大小可供访问ncdu它们需要位于文件系统中。所以我们需要将存档挂载为文件系统。

我们使用保险丝用户空间文件系统实现archivemount

安装fuse文件系统:

sudo apt-get install archivemount
Run Code Online (Sandbox Code Playgroud)

mkdir一个目录,mount将存档放入cd其中,然后运行ncdu

$ mkdir bash-4.3-mount
$ archivemount bash-4.3.tar.gz bash-4.3-mount
$ cd bash-4.3-mount
$ ncdu
Run Code Online (Sandbox Code Playgroud)


现在你可以ncdu正常使用了:

ncdu 1.10 ~ Use the arrow keys to navigate, press ? for help                     
--- /tmp/archivedutest/bash-4.3-mount/bash-4.3/lib ----------------
                        /..                                                      
    1.2MiB [##########] /readline
  343.0KiB [##        ] /sh
  316.5KiB [##        ] /intl
  104.5KiB [          ] /glob
   97.0KiB [          ] /malloc
   32.0KiB [          ] /termcap
   22.0KiB [          ] /tilde

 Total disk usage:   2.1MiB  Apparent size:   2.0MiB  Items: 251                 
Run Code Online (Sandbox Code Playgroud)



现在,您真正感兴趣的是文件的压缩大小,而不是未压缩的大小:您想查看哪些文件在实际存档中占用最多空间。

严格来说,这是不可能的,因为存档是整体压缩的。单个文件没有“压缩大小”。

因此单个文件的压缩大小只能是近似值。
一种近似值是单独压缩文件的大小。
另一个是假设所有文件都按相同比率压缩的压缩大小的一小部分。当然还有其他方法。

第一个好像还可以。为了实现它,没有办法实际解压和重新压缩各个文件,所以我认为没有理由不这样做,解压到文件系统,并对文件使用 ncdu。