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

Abd*_*red 1322 command-line ls disk-usage

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

sam*_*sam 1817

du -sh file_path

解释

  • ...除非你有硬链接;-) http://stackoverflow.com/questions/19951883/du-counting-hardlinks-towards-filesize (57认同)
  • 它与 `find` 一起工作非常好,例如计算当前路径中特定子目录中的空间量:`$ find 。-type d -name "node_modules" -prune -exec du -sh {} \;` (2认同)

Pac*_*ist 400

只需使用以下du命令:

du -sh -- *
Run Code Online (Sandbox Code Playgroud)

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

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

df -h .
Run Code Online (Sandbox Code Playgroud)

  • (--) 用于大多数 bash 内置命令和许多其他命令,以表示命令选项的结束,之后只接受位置参数。[`source`](https://unix.stackexchange.com/questions/11376/what-does-double-dash-mean) (6认同)
  • 如果该目录中的任何文件以破折号开头,`du -sh *` 将开始抛出“未知选项”错误。更安全地做`du -sh -- *` (5认同)
  • `du -sh -- * .*` 包含点文件。例如,这对于包含一个可能很大的 `.git` 目录很有用。或者,在 zsh 中,您可以默认使用 `setopt globdots` 来 glob dotfiles。 (5认同)
  • `--` 有什么作用?我知道它适用于 shell *built-ins* 来结束选项参数,但 `du` 不是内置的,我没有看到 `du` 的这种用法记录:https://linux.die.net /人/1/杜 (4认同)
  • `du -sh *` 不显示隐藏文件夹的内存使用情况 (2认同)

Chr*_*pie 258

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

du -hs
Run Code Online (Sandbox Code Playgroud)

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

du -h --max-depth=1 | sort -hr
Run Code Online (Sandbox Code Playgroud)

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

  • +1 为“| sort -hr” (8认同)
  • @richhallstoke 如果您使用 [`ncdu`](https://unix.stackexchange.com/a/342796/139857),默认情况下文件按降序排序。 (2认同)
  • 只是想指出,在 osx 上,“du”似乎使用“-d”而不是“--max-深度” (2认同)

Teq*_*ue5 103

du使用起来可能很复杂,因为您似乎必须传递 100 个参数才能获得不错的输出。弄清楚隐藏文件夹的大小甚至更难。

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

全国总工会

您可以获得易于浏览的每个文件夹摘要。

  • 检查了“ncdu”并想向其他人指出:当您正在寻找那些使某些目录膨胀的文件时,此实用程序非常有用,因为它显示大小磁带/指示器,使罪魁祸首脱颖而出。总的来说,这提供了适量的交互性,这在仅命令行环境中可能特别有用。 (4认同)

Tbl*_*lue 37

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


小智 29

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

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

du -h (file name)
Run Code Online (Sandbox Code Playgroud)


小智 26

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

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

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

du -csbh .
Run Code Online (Sandbox Code Playgroud)


小智 18

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

# du -sh ./*
Run Code Online (Sandbox Code Playgroud)


mpe*_*pen 18

df -h .; du -sh -- * | sort -hr
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)


小智 12

这是您的 .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
}
Run Code Online (Sandbox Code Playgroud)

示例输出:

$ 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
Run Code Online (Sandbox Code Playgroud)

对于子目录:

$ dusort .
$ dusort /var/log/
Run Code Online (Sandbox Code Playgroud)


Edu*_*scu 11

以 root 身份使用此命令

sudo ls -1d */ | sudo xargs -I{} du {} -sh && sudo du -sh
Run Code Online (Sandbox Code Playgroud)


0x8*_*00D 10

另一种变体:

du -h --max-dep=1
Run Code Online (Sandbox Code Playgroud)


小智 10

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

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'
Run Code Online (Sandbox Code Playgroud)


Ste*_*nny 7

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

  • 一份文件
  • 文件
  • 一个目录
  • 目录
ls -A -R -g -o "$@" | awk '{n1 += $3} END {print n1}'
Run Code Online (Sandbox Code Playgroud)


ant*_*_rh 7

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

如果文件系统是可压缩的,则du可能会输出比所有文件的总大小还要小的数字,因为文件可能会被文件系统内部压缩,因此它们在媒体上占用的空间比它们包含的未压缩信息更少。如果有稀疏文件,则相同。

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

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

find . ! -type d -print0 | xargs -r0 stat -c %s | paste -sd+ - | bc
Run Code Online (Sandbox Code Playgroud)

甚至更短:

find . ! -type d -printf '%s\n' | paste -sd+ - | bc
Run Code Online (Sandbox Code Playgroud)

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


小智 6

您可以使用

du -sh directory/

du -sh filename

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

df -h

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

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