我试图通过使用带有选项lsl命令来获取目录(包含目录和子目录)的大小。它似乎适用于文件(ls -l file name),但是如果我尝试获取目录的大小(例如ls -l /home),虽然只有更大的字节,但我只能得到4096个字节。

评论

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

如果您似乎是新手,我将指出有用的-h选项,您可以将其添加到-l选项(即ls -lh)中,以以易于使用的方式(如1.1M)打印出文件的大小而不是1130301。@sam在回答您关于目录的问题时给出的du -hs命令中的“ h”也表示“人类可读”,并且还出现在df -h中,该数字显示了人类可读的已用量和磁盘上的可用空间。

跨站点重复:如何从命令行确定目录(文件夹)的总大小?

du -sh-*对我有用。

#1 楼

du -sh file_path

说明



du(光盘使用率)命令估计文件路径空间使用率

-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




评论


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

–罗马诺
15年2月20日在10:31

与find例如,它很好用计算当前路径中特定子目录中的空间量:$ find。 -type d -name“ node_modules” -prune -exec du -sh {} \;

– Alex Glukhovtsev
19年4月16日在6:02



#2 楼

只需使用du命令即可:

du -sh -- *


将以可读的格式为您提供当前目录中所有非隐藏目录,文件等的累积磁盘使用情况。 br />
您可以使用df命令了解包含目录的文件系统中的可用空间:

df -h .


评论


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

– mpen
16 Mar 1 '16 at 23:07

du -sh *不显示隐藏文件夹的内存使用情况

–令人讨厌的Prabhakar Singh
16-10-18在13:00

du -sh-*。*包含点文件。例如,这对于包含一个可能很大的.git目录很有用。另外,在zsh中,默认情况下您可以将set globdots设置为glob dotfiles。

–cbarrick
16-11-29在3:13



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

– flow2k
19年1月10日在5:16

(-)用于大多数bash内置命令和许多其他命令,以表示命令选项的结尾,此后仅接受位置参数。资源

– Bal Krishna Jha
6月3日,11:47



#3 楼

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

du -hs


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

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


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

评论


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

–richhallstoke
16年7月13日在9:41



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

–脚掌
18年2月3日在6:35

为“ | sort -hr” +1

–花式
18 Mar 16 '18 at 19:42

为--max-depth +1。我需要查看当前目录文件夹的大小,而不是每个子目录和文件的大小。这解决了我的问题

– imans77
19/12/16在20:36

只是要注意,在osx上du似乎使用-d而不是--max-depth

–lfender6445
12月21日18:11

#4 楼

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

让生活变得轻松并使用ncdu



您可以获取每个文件夹的摘要容易浏览的东西。

#5 楼

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

#6 楼

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

-h选项以易于理解的形式(例如4k,5M,3G)显示结果。

du -h (file name)


#7 楼

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

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

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

du -csbh .


评论


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

– Ryan Shillington
16-10-3在22:31

#8 楼

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

# du -sh ./*


#9 楼

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
16年6月15日在15:51

#10 楼

这是您的.bash_aliases的函数

# du with mount exclude and sort
function dusort () {
    DIR=$(echo  | sed 's#\/$##')
    du -scxh $(mount | awk '{print }' | 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/


#11 楼

我以根用户身份使用此命令:

sudo ls -1d */ | sudo xargs -I{} du {} -sh && sudo du -sh


#12 楼

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

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


评论


我将使用-not -type d不仅求和普通文件的大小(-f),而且求和符号链接的大小等等。

–anton_rh
18-09-24在11:08

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

–bballdave025
19年5月22日在21:31

#13 楼

另一种变体:

du -h --max-dep=1


#14 楼

请注意,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


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

#15 楼

这是可以使用的POSIX脚本:


文件
文件
目录
目录

 ls -A -R -g -o "$@" | awk '{n1 += } END {print n1}'
 


#16 楼

您可以使用

du -sh directory/



du -sh filename

来了解文件夹或文件所占用的空间。 br />
df -h

将以人类可读的格式显示磁盘使用情况-h会这样做。

还有一个基于gui的程序Disk Usage Analyzer。 />