如何从命令行确定目录(文件夹)的总大小?

是否有一个简单的命令来显示目录(文件夹)中所有文件的总聚合大小(磁盘使用情况)?

我试过这些,他们没有做我想做的事:

  • ls -l ,它只显示目录中单个文件的大小
  • df -h ,仅显示磁盘上的空闲和已用空间。

命令du “为目录递归地汇总每个FILE的磁盘使用情况”,例如,

 du -hs /path/to/directory 
  • -h是得到“人类可读”的数字,例如得到140M而不是143260 (大小以KB为单位)
  • -s用于汇总(否则您不仅会获得文件夹的大小,还会分别获取文件夹中的所有内容)

当您使用-h您可以使用人类可读值进行排序

 du -sh | sort -h 

sort上的-h标志将考虑“Human Readable”大小值。


如果要避免递归列出所有文件和目录,可以提供--max-depth参数来限制显示的项目数。 最常见的是, – --max-depth=1

 du -sh --max-depth=1 /path/to/directory 

最近我发现了一个很棒的基于ncurses的交互式工具,它可以快速为您提供有关目录大小的概述。 多年来一直在搜索这种工具。

  • 快速浏览文件层次结构
  • 你可以删除工具内部的巨大临时文件
  • 非常快

将其视为命令行的baobab :

 apt-get install ncdu 

这会以递归方式查找大小,并将其放在每个文件夹名称的旁边,以及底部的总大小,所有这些都是人类格式

 du -hsc * 

请享用!

 du foldername 

这里有关于该命令的更多信息

tree是这项工作的另一个有用的命令:

只需通过sudo apt-get install tree安装它并输入以下内容:

 tree --du -h /path/to/directory ... ... 33.7M used in 0 directories, 25 files 

从人树 :

 -h Print the size of each file but in a more human readable way, eg appending a size letter for kilo‐ bytes (K), megabytes (M), gigabytes (G), terabytes (T), petabytes (P) and exabytes (E). --du For each directory report its size as the accumulation of sizes of all its files and sub-directories (and their files, and so on). The total amount of used space is also given in the final report (like the 'du -c' command.) 

以下是我用来打印总数,文件夹和文件大小的内容:

 $ du -sch /home/vivek/* | sort -rh 

细节

  ------------------------------------------------------------ -c, --total produce a grand total -h, --human-readable print sizes in human readable format (eg, 1K 234M 2G) -s, --summarize display only a total for each argument ------------------------------------------------------------- -h, --human-numeric-sort compare human readable numbers (eg, 2K 1G) -r, --reverse reverse the result of comparisons 

产量

  70M total 69M /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib 992K /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results 292K /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target 52K /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files 

答案显而易见, du是查找目录总大小的工具。 但是,有几个因素需要考虑:

  • 有时, du输出可能会产生误导,因为它会报告文件系统分配的空间,这可能与各个文件的大小总和不同。 通常,文件系统将为文件分配4096个字节,即使您只存储了一个字符!

  • 输出差异由于2的功率和10个单位的功率。 -h切换到du将字节数除以2 ^ 10(1024),2 ^ 20(1048576)等,以提供人类可读输出。 许多人可能更习惯于看到10的力量(例如1K = 1000,1M = 1000000)并且对结果感到惊讶。

要查找目录中所有文件的大小总和(以字节为单位),请执行以下操作:

 find  -ls | awk '{sum += $7} END {print sum}' 

例:

 $ du -s -B 1 255729664 $ find . -ls | awk '{sum += $7} END {print sum}' 249008169 

对于只有可读格式的目录大小,请使用以下内容:

 du -hs directoryname 

这可能不在正确的部分,但从命令行,您可以尝试:

 ls -sh filename 

-s是大小, -h是人类可读的。

使用-lls列表中显示,如下所示:

 ls -shl 

du /foldername是了解文件夹大小的标准命令。 最佳做法是通过阅读手册页来查找选项:

 man du 

在使用命令之前,您应该阅读手册页( 在线提供 )。

这是一个POSIX脚本,可以使用:

  • 一份文件
  • 一个目录
  • 目录
 #!/bin/sh ls -ARgo "$@" | awk '{q += $3} END {print q}' 

资源

我认为最好的是:

 du -h directory_name | tail -n1 

这将仅显示您感兴趣的目录的大小,并且不会打印该目录中任何目录和文件的大小。

我应该补充一点,如果文件夹的大小很大,那么du需要更长的时间。 你必须耐心等待这个命令才能运作。 就像任何其他unix命令一样,您可以通过在此命令之前使用time来找出此过程的总时间:

 time du -h directory_name | tail -n1