我正在使用 git-annex,它是 DVCS git 的一个扩展,专为处理大文件而设计。它大量使用符号链接。实际的大文件被移动到目录中.git/annex
,原始文件被符号链接到那里。
我的磁盘空间快用完了,需要清理一下,看看是什么占用了我的所有空间。通常我会使用磁盘使用工具,如ncdu
Baobab 或 Filelight。但是它们将符号链接视为基本为空,并且只将其指向的文件计为使用任何空间。这意味着当我使用 git-annex 时,它显示主目录中没有使用空间,而 .git/annex 目录中使用了大量空间。这没有帮助。
有没有基于 Linux 的磁盘使用程序(图形化或 ncurses)?apt-get 安装会更容易,能够(通过选项或不通过选项)计算符号链接占用的原始文件占用的空间?许多程序都有针对硬链接的不同行为的选项,因此有些程序应该有
(我知道将符号链接计为使用空格存在缺陷,例如将空格数两次、符号链接损坏等。但这对我的目的来说没问题)
答案1
GNU du 具有 --dereference 选项,可在计算磁盘使用量时取消引用符号链接。但是,du 拒绝对同一空间进行两次计数,这可能会破坏您的情况:
% mkdir foo bar baz
% dd if=/dev/zero of=foo/test bs=1024 count=10000
10000+0 records in
10000+0 records out
10240000 bytes (10 MB) copied, 0.0176239 s, 581 MB/s
% (cd bar; ln -s ../foo/test)
% (cd baz; ln -s ../foo/test)
% du -hc bar baz
4.0K bar
4.0K baz
8.0K total
% du -hc --dereference bar baz
9.8M bar
4.0K baz
9.8M total
但是,如果您没有指向同一目标的多个符号链接,我认为 --dereference 可以满足您的要求。
答案2
目前,git-annex 针对此问题有自己的解决方案。你可以使用:
git annex info --fast *
...直接从 git-annex 的文件获取实际磁盘使用情况(及更多信息)。它还可以对远程存储库进行操作,这非常有用:
git annex info --fast --not --in here .
... 将为您提供以下数据量不是例如在当前存储库中。
讨论此问题的上游论坛是附件上是否等同于“du”?还有更多建议,例如du -L
,加杜和尺寸这里的其他答案中提到过。
答案3
答案4
是否有任何(图形化或 ncurses)基于 Linux 的磁盘使用程序(apt-get 安装会更容易,能够(通过选项或不通过选项)将符号链接计为使用原始文件占用的空间?
总结: du -akL mydirectory | xdiskusage -aq
长答案:结合两个强大的可组合程序
我也用git 附件并有同样的需求。
获取磁盘使用情况的参考工具:GNU du
GNUdu
与大多数 GNU 工具一样有一个有很多选择, 包括:
'-L' '--取消引用'
取消引用符号链接(显示链接指向的文件或目录使用的磁盘空间而不是链接使用的空间)。
以交互方式探索和放大磁盘使用情况树的参考工具:xdiskusage
此外,还有一款出色的轻量级磁盘使用情况表示工具,名为磁盘管理。
您可以完全以图形方式使用它:选择文件夹,或选择完整文件系统以包含可用空间表示。您可以单击、使用箭头和 Enter 键放大树显示,隐藏一些子树。它非常实用、简单、快速,即使在远程显示上也是如此。
将它们结合起来并获利!
它有一个很好的特性,您还可以将类似于的 du 调用的结果提供给它du -ak
。
因此,你可以这样做:
du -akL mydirectory | xdiskusage
我碰巧总是使用这种变体,这-a
意味着显示所有文件(而不仅仅是目录),并-q
通过删除进度滑块使一切变得更快:
du -akL mydirectory | xdiskusage -aq
图片来源http://xdiskusage.sourceforge.net/作者:比尔·斯皮扎克(Bill Spitzak)。
apt-get ?
apt-get 可安装
在 Debian 及其衍生版本(包括 Ubuntu)上:
sudo apt-get install coreutils xdiskusage
(您肯定已经安装了 coreutils。)