如何在命令行上获取目录的大小?


1065

我尝试使用ls带option 的命令来获取目录(包含目录和子目录)的大小l。它似乎适用于文件(ls -l file name),但是如果我尝试获取目录的大小(例如ls -l /home),则只能获得4096个字节,尽管总的来说它要大得多。


18
1)严格来说,不能。Linux有目录,没有文件夹。2)目录的大小(该目录包含指向其他文件的inode的特殊文件)的大小与该目录内容的大小之间存在差异。正如其他人指出的那样,du命令提供了后者,这正是您想要的。
jamesqf

11
如您所见,我只是指出-h您可以添加到该-l选项(即ls -lh)中的有用选项,以将要打印的文件的大小以人类友好的符号(如1.1M而不是1130301)的形式显示出来。 “在du -hs那@sam给的答案你对目录的问题命令也意味着‘人类可读’,而且它也出现在df -h其中显示了人类可读的数额对磁盘使用和自由空间。
msouth,2015年

Answers:


1489

du -sh file_path

说明

  • dud ISC ü SAGE)命令估计FILE_PATH空间使用情况
  • 选项-sh是(来自man du):

      -s, --summarize
             display only a total for each argument
    
      -h, --human-readable
             print sizes in human readable format (e.g., 1K 234M 2G)
    

    要检查多个目录并查看总数,请使用du -sch

      -c, --total
             produce a grand total
    

44
......除非您有硬链接;-) stackoverflow.com/questions/19951883/…–
Rmano

15
这是我喜欢的答案<3对该命令进行了概述和介绍,du您也可以通过这种方式搜索更多详细信息man du……

对于类似Unix的制造商的提示:下次,只需先执行“ diskusage”命令,甚至可以进行“磁盘使用” ...然后是快捷方式...;)
jave.web

它非常find$ find . -type d -name "node_modules" -prune -exec du -sh {} \;
有用

321

只需使用以下du命令:

du -sh -- *

将以可读格式为您提供当前目录中所有非隐藏目录,文件等的累积磁盘使用情况。

您可以使用以下df命令来了解包含目录的文件系统中的可用空间:

df -h .

4
du -sh *如果该目录中的任何文件以破折号开头,则开始引发“未知选项”错误。做得更安全du -sh -- *
mpen

1
du -sh *不显示隐藏文件夹的内存使用情况
Prashant Prabhakar Singh,2016年

4
du -sh -- * .*包括点文件。例如,这对于包含一个可能很大的.git目录很有用。另外,在zsh中setopt globdots,默认情况下,您也可以glob点文件。
cbarrick '16

1
怎么--办?我知道它适用于shell 内置的结束选项参数,但du不是内置的,而且我看不到这种用法的记录dulinux.die.net/man/1/du
flow2k

有时你需要添加-b--apparent-size
elig

196

du是你的朋友。如果您只想知道目录的总大小,请跳入目录并运行:

du -hs

如果您还想知道哪些子文件夹占用了多少磁盘空间?!您可以将此命令扩展为:

du -h --max-depth=1 | sort -hr

这将为您提供所有子文件夹的大小(级别1)。输出将被排序(顶部最大的文件夹)。


在某些(也许是较旧的?)版本的linux上,似乎没有h开关,因此,我能找到的下一个最佳命令是:du -c --max-depth = 1 | sort -rn
richhallstoke

@richhallstoke(如果使用ncdu文件)默认情况下按大小降序排序。
Armfoot

3
为“ | sort
-hr

67

du使用起来可能会很复杂,因为您必须传递100个参数才能获得不错的输出。找出隐藏文件夹的大小更加困难。

使您的生活变得轻松和易于使用ncdu

南都

您可以轻松浏览每个文件夹的摘要。


9
至少对于那些可以在系统上安装软件的用户来说,这应该是正确的答案。不幸的是,我认为大多数人都不会向下滚动到足以看到这一点的程度。
DavidR

@ RickyNotaro-Garcia不,这将忽略隐藏的对象并挂在大目录上。可能有一个不错的解决方案,其中有十几条管道,但是为什么要浪费生命。
Teque5

@ RickyNotaro-Garcia阅读我的全部评论:您的尝试将忽略隐藏的对象并挂在大型目录上。
Teque5

2
ncdu太好了,忘记时我总是在搜索此命令。它快速,易于导航,并有助于轻松查找大文件夹。仅供参考,它也可用于macOS,可能还适用于所有linux机器。
卢卡斯

..和你可以直接从删除文件夹ncdud
ccpizza

32

其他人已经提到过du,但是我也想提到Ncdu-它是ncurses的ncurses版本,du并提供交互性:您可以直接浏览目录层次结构并查看子目录的大小。


26

du命令显示文件的磁盘使用情况。

-h选项以人类可读的形式(例如4k,5M,3G)显示结果。

du -h (file name)

22

以上所有示例将告诉您磁盘上数据的大小(即,特定文件正在使用的磁盘空间量,通常大于实际文件大小)。在某些情况下,如果数据实际上没有存储在此特定磁盘上并且仅存在inode引用,则这些情况将无法为您提供准确的报告。

在您的示例中,您在单个文件上使用了ls -l,它将返回文件的实际大小,而不是其在磁盘上的大小。

如果您想知道实际的文件大小,请在du中添加-b选项。

du -csbh .

是。我正在使用sdfs来压缩和删除文件,因此我不知道为什么它报告的数字如此之少。使用ls的文件的实际大小可以通过使用以下命令找到:du -b
Ryan Shillington

15

我个人认为这是最好的,如果您不想使用 ncdu

# du -sh ./*

14
df -h .; du -sh -- * | sort -hr

这显示了当前驱动器上剩余的磁盘空间,然后告诉您每个文件/目录占用了多少磁盘空间。例如,

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2       206G  167G   29G  86% /
115M    node_modules
2.1M    examples
68K     src
4.0K    webpack.config.js
4.0K    README.md
4.0K    package.json

仅供参考,它似乎报告了磁盘大小。即,它可能会填充到最接近的4KB。
mpen


9

递归查找当前目录下的所有文件并总结其大小:

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'

-not -type d不仅可以求和普通文件(-type f)的大小,还可以求和符号链接的大小等等。
anton_rh 18/09/24

这很棒,因为您没有得到存储文件所需的开销,而只有文件本身的大小。
bballdave025

9

这是您的.bash_aliases的函数

# du with mount exclude and sort
function dusort () {
    DIR=$(echo $1 | sed 's#\/$##')
    du -scxh $(mount | awk '{print $3}' | sort | uniq \
     | sed 's#/# --  exclude=/#') $DIR/* | sort -h
}

样本输出:

$ dusort /
...
0       /mnt  
0       /sbin
0       /srv
4,0K    /tmp
728K    /home
23M     /etc
169M    /boot  
528M    /root
1,4G    /usr
3,3G    /var
4,3G    /opt
9,6G    total

对于子目录:

$ dusort .
$ dusort /var/log/


6

请注意,du打印目录所占的空间通常大于目录中所有文件的总大小,这是因为要du考虑存储在介质上以组织目录的所有辅助信息的大小文件系统格式。

如果文件系统是可压缩的,则du输出的数量可能少于所有文件的总大小,因为文件可能是文件系统在内部进行压缩的,因此它们在媒体上的空间比仅包含它们的未压缩信息少。如果有稀疏文件,则相同。

如果目录中有硬链接,则du由于目录中的几个不同文件引用了介质上的相同数据,因此打印的值也可能较小。

为了获得目录中所有文件的直接总大小,可以使用以下单行shell表达式(假设使用GNU系统):

find . ! -type d -print0 | xargs -r0 stat -c %s | paste -sd+ - | bc

甚至更短:

find . ! -type d -printf '%s\n' | paste -sd+ - | bc

它只是将目录(及其子目录递归)中所有非目录文件的大小一一求和。请注意,对于符号链接,它报告符号链接的大小(而不是符号链接指向的文件的大小)。


5

您可以使用

du -sh directory/

du -sh filename

知道文件夹或文件占用的空间。

df -h

将以人类可读的格式显示磁盘使用情况-h执行此操作。

还有一个基于gui的程序,称为Disk Usage Analyzer


5

这是可以使用的POSIX脚本:

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

资源

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.