我有一个大小为 9T 的目录(挂载点),我想获取每个目录的大小,尤其是消耗更多空间的目录。为此,我使用下面的命令并将结果从 bash 脚本推送到 txt 文件中。
du -hsx * | sort -rh | head -10
这比我预期的要花更多的时间,即使几个小时后我也无法多次得到结果。
我正在通过网络并使用 mobgar VPN 连接来尝试此操作。这里有什么可以改进的!
答案1
如果您想要确切的磁盘空间,那么这将需要一些时间,因为您的目录很大。如果您必须经常执行此操作,那么最好设置一个 cron 作业,du
每天运行一次并创建此文件(或根据您的要求和这些目录更新的频率选择任何频率)
通过这种方式,您可以在一个较旧的快照上快速对此文件进行排序操作。
答案2
您可以使用:
ls -ldpShR
-l
用于长版本
-d
仅显示目录
-p
在目录名称上使用 / 按
-S
大小排序
-h
意味着人类可读
-R
意味着递归
答案3
du --max-depth=1 * | sort -nr | head -n 10
此命令将创建一个包含文件夹大小的列表,从大到小排序,并且将获取前 10 行(假设du
使用的是 GNU coreutils)。
答案4
更新后的版本。
SSD 和 HDD 的首次读取速度以及缓冲和缓存大小会有所不同。
所以我假设您有权访问文件夹(引用“我多次无法得到结果”,对于某些文件夹,您可能需要权限才能访问,否则您可能会收到此消息“du: 无法读取目录 '/direc/tori/ss ': 权限被拒绝”)
根据您的
du -hsx * | sort -rh | head -10
h: print sizes in human readable format
s: --summarize you want the total size of directory,(you didn't ask for sub-directory, did you?)
x: you want to "skip directories on different file systems"
sort the result r: reverse and h: human numeric (you need h here because you use it there with du to distigush K,M,G)
head -10 : get the first top 10 of the sorted list
除了du还有别的办法吗?是的,其中之一正在使用 ncdu(du 的基于 curses 的版本)
解释:
检查时间(本地)基于我的系统性能
GNU bash,版本 5.1.4
对于具有 132G 数据的 HDD 7200rpm 假设正确的目录:
1- time du -hsx * | sort -rh | head -10
real 0m44.978s
user 0m2.432s
sys 0m13.183s
2- 时间 du -B 1 --max-深度=1 |排序-rh |头-10
real 0m43.823s
user 0m2.269s
sys 0m12.879s
real:用户经过的时间,sys:CPU 处理时间。
如果您有大文件(例如 iso 文件)将显示在第一个 du 中,但第二个将仅显示目录。
在我不使用头部的情况下:这是使用的尺寸你的命令文件和文件夹 38G,22G,20G,11G,9.6G,6.9G,5.9G,3.2G,3.2G,2.7G,781M,590M,301M,132M,12M,6.9M,6.7M,3.6M,3.5M ,276K,224K,25K,4.0K,4.0K,4.0K,512,0
当我使用矿(将块转换为 K、M、G 后)123GiB、38GiB、22GiB、20GiB、11GiB、9.6GiB、6.9GiB、3.2GiB、3.2GiB、781MiB、590MiB、301MiB、132MiB、12MiB、6.9MiB、6。 7MiB,3.6 MiB、3.5MiB、276KiB、224KiB、100KiB、25KiB、512B
文件没有显示。
我认为我不需要证明 SSD 比 HDD 快得多。
ncdu 1.15.1 无排序
real 0m43.550s
user 0m2.742s
sys 0m13.604s
另外 ncdu 有用于远程连接的 ssh 选项,请查看。
如果您使用不同的 shell,请更新您的问题并根据您已阅读的答案和评论提供更多信息。
最后我认为这两个命令之间的时间差异并不大,因此您可以将结果保存到文本文件中过夜,并稍后对其进行排序。