如何在 Linux 上获取包含许多小子目录的大目录的大小?我只想要父目录的总大小。
我尝试过du -s mydirectory/
,但执行需要很长时间,而且我无法长时间保持终端打开。
有没有一种更快的方法可以更快地获取目录的大小,或者有一种在后台运行的方法,以便我可以关闭终端并稍后获取结果?
答案1
对于nohup
马库斯对screen
答案的评论中建议的解决方案,您可以在 中找到输出nohup.out
。您可能想将其重定向到合适的文件,例如:
nohup du -s myfolder > size-of-myfolder.txt &
答案2
您可以screen
在后台使用:
screen -S du -d -m du -s my_dir/
然后重新附加:
screen -r du
答案3
如果您正在寻找能够按需快速跟踪文件夹大小的解决方案,有一些选择:
CephFS 文件系统将文件夹(包括子文件夹)内容的总磁盘使用量显示为文件夹的“大小”,而不是显示文件夹中条目所需的存储大小。您可以简单地
ls -Slh
找到最大的文件和文件夹,然后在子文件夹中重复此操作。 CephFS 适用于具有许多机器的集群。它可以在单台机器上运行,但设置比普通文件系统更复杂。如果对子文件夹的大小不感兴趣,您可以使用 XFS 的项目配额功能。将每个感兴趣的文件夹分配给要按项目配额跟踪的项目。然后,配额报告会显示每个项目使用了多少空间。
同样,如果您可以为每个要跟踪的文件夹创建专用用户帐户,则可以使用普通用户配额来跟踪使用情况(文件大小和数量)。这适用于比项目配额更广泛的文件系统。
答案4
POSIX
另一种方法是在shell 中使用窗口管理器背景:
{
size=$(du -s myfolder/ | cut -d' ' -f1)
size=$((size/1024))
zenity --info --text="myfolder/ size is ${size}MiB"
} &
看http://mywiki.wooledge.org/ArithmeticExpression
如果将控制运算符放在&
命令的末尾,例如command &
,shell 会在后台执行该命令subshell
。 shell 不等待命令完成,返回状态为 0。最后一个后台命令的 Pid 可通过特殊变量获得$!