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


785

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

我已经尝试过这些,但是他们没有做到我想要的:

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



友善的提醒,这对像BTRFS这样的CoW文件系统可能几乎没有意义。
Val

Answers:


1263

命令du“以递归方式总结目录中每个文件的磁盘使用情况”,例如,

du -hs /path/to/directory
  • -h是获取数字“人类可读”,例如,获取140M而不是143260(以KB为单位)
  • -s为总结(否则你会得到的不仅仅是该文件夹的大小,同时也为所有该文件夹分开)

使用时,-h您可以使用以下命令对人类可读的值进行排序

du -h | sort -h

-hsort将考虑“人类可读的”大小值。


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

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

9
尊重他人。:)
myusuf3

93
我使用du -shDOOSH来记住它(注意:命令是相同的,只是出于记忆目的而组织命令行标志)
Marco Ceppi

3
du有一个有用的选项,称为--apparent-size。它可用于查找文件或目录的实际大小(而不是其在磁盘上的占用空间),例如,只有4个字符的文本文件将占用约6个字节,但仍会占用约4K的空间。常规的du -sh输出。但是,如果传递--apparent-size选项,则输出为6。man du说:--apparent-size打印表观大小,而不是磁盘使用情况;尽管外观大小通常较小,但由于(“稀疏”)文件中的漏洞,内部碎片,间接块而可能会更大
Hopping Bunny

4
这也适用于OS X!谢谢,我确实在寻找一种清除本地计算机和服务器上文件的方法,但是自动化方法似乎不起作用。因此,我跑到du -hs *最大的目录,发现哪些文件太大...这是一个好方法,最好的部分是您无需安装任何东西!当之无愧的是我的赞扬
Dev

@BandaMuhammadAlHelal我认为有两个原因:舍入(du具有一些特殊的舍入,如果值在所选单位中具有多个位数,则不显示小数),以及经典的1024 vs. 1000前缀问题。du有一个选项-B(或--block-size)来更改显示值的单位,或者您可以使用-b而不是-h获取“原始”值(以字节为单位)。
Marcel Stimberg '17

164

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

  • 快速钻取文件层次结构
  • 您可以从工具内部删除例如巨大的临时文件
  • 极快

将其视为命令行中的baobab

apt-get install ncdu

11
这绝对是太棒了!像DaisyDisk,为OSX
零下

3
ncdu太棒了!安装后,只需执行此操作ncdu /。您将很快找到系统上最大的文件。同时按下h而内ncdu的控制台界面。它具有非常有用的快捷方式
vlad-ardelean

这正是我需要的:如此简单,如此高效。纯真的爱。
user3790897 '18 -10-30

52

这将递归查找大小,并将其放在每个文件夹名称旁边,并在底部放置总大小,所有格式均为人工格式

du -hsc *


10

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, e.g. 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.)

9

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

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

细节

 ------------------------------------------------------------
   -c, --total
          produce a grand total
   -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)
   -s, --summarize
          display only a total for each argument
 -------------------------------------------------------------
   -h, --human-numeric-sort
          compare human readable numbers (e.g., 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

4

答案已经很明显地表明du该工具是查找目录总大小的工具。但是,有两个因素需要考虑:

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

  • 由于2的幂和10的幂导致的输出差异。该-h开关du由2 ^ 10(1024),2 ^ 20(1048576)等分割的字节数得到的人可读输出。许多人可能更习惯于看到10的幂(例如1K = 1000、1M = 1000000),并对结果感到惊讶。

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

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

例:

$ du -s -B 1
255729664

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

对于大型文件夹#1,find-ls-awk将返回错误的值。对于较新的awk,您可以添加--bignum-M; 如果那不是一个选择,请使用find . -ls | tr -s ' '|cut -d' ' -f 7| paste -sd+ |bc #2
goozez

如果使用2的幂是一个问题,则可以使用以下--si选项:“像-h,但使用1000的幂而不是1024”
muru

1

对于仅可读格式的目录大小,请使用以下命令:

du -hs directoryname

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

ls -sh filename

-s是尺寸,并且-h是人类可读的。

使用-l显示在ls列表中,如下图所示:

ls -shl

0

du /foldername是知道文件夹大小的标准命令。最佳实践是通过阅读手册页来找到选项:

man du

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


0

这是可以使用的POSIX脚本:

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

资源


0

如果所需目录包含许多子目录,请使用以下命令:

$ cd ~/your/target/directory
$ du -csh 

-c,--total产生总计
-s,--summary只显示每个参数的总计
-h,-以人类可读格式显示的人类可读打印尺寸(例如1K 234M 2G)

这将产生当前目录中所有文件/文件夹的内存使用总量。


-1

我认为最好的是以下几种:

du -h directory_name | tail -n1

这只会显示您感兴趣的目录的大小,而不会显示该目录中任何目录和文件的大小。

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

time du -h directory_name | tail -n1

6
du对此有一个选择:-s
muru 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.