使用ls列出目录及其总大小

1174

在Unix中,是否可以使用ls列出子目录及其所有内容的总大小,而不是通常的4K(我认为)只是目录文件本身的大小?

total 12K
drwxrwxr-x  6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk

在查看了man手册后,我毫无头绪。


4
你想要使用"du -s"命令。 - guns
46
搜索鸭子:alias ducks='du -cksh * | sort -hr | head -n 15'。该命令将显示当前目录下占用磁盘空间最多的前15个文件或文件夹,并按照从高到低的顺序排列。 - Sebi
请注意,alias ducks='du -cksh * | sort -hr | head -n 15' 中的 -h 选项和 du-c 选项大多是非便携式 GNU 扩展,而不是 POSIX 标准 dusort 实用程序。如果没有 -h 选项,则必须使用 -n 选项调用 sort 进行数字排序,简化为:du -sk * | sort -n - Andrew Henle
sort中省略-r,并且不通过head(或tail)传递结果,将整个结果发送到终端,最大的结果最后显示。这在交互式会话中非常有用。请注意,*将跳过以.开头的文件和目录,例如.m2 - Andrew Henle
29个回答

8

我总是使用du -sk-k标志以千字节显示文件大小)。


6
这应该是一条评论,提供额外的信息给@molf更正确和更好地解释的已接受答案。它不应被视为独立的答案。 - code_monk

6

这是我喜欢的方式

更新: 我不喜欢之前的翻译,因为它没有显示当前目录中的文件,只列出了目录。

在ubuntu上,/var 的示例输出:

sudo du -hDaxd1 /var | sort -h | tail -n10

4.0K    /var/lock
4.0K    /var/run
4.0K    /var/www
12K     /var/spool
3.7M    /var/backups
33M     /var/log
45M     /var/webmin
231M    /var/cache
1.4G    /var/lib
1.7G    /var

4

在同一目录下使用“du -sch *”命令。


4
为了递归地显示当前目录的文件和子目录的大小,请使用以下命令:
du -h .

为了显示相同大小的信息,但不递归打印它们的子目录(可能会有很长的列表),只需使用--max-depth选项:
du -h --max-depth=1 .

3

这些都是很好的建议,但我使用的是:

du -ksh * | sort -n -r

-ksh 命令会以人类可读的方式列出文件和文件夹,并将它们按兆字节、千字节等单位排序。然后您可以对它们进行数字排序并反转排序,以便将较大的文件排在前面。

这个命令唯一的缺点是计算机不知道千兆字节比兆字节大,因此它只会按数字排序,您经常会发现像这样的列表:

120K
12M
4G

请注意单位。

这个命令在Mac上也可以使用(例如sort -h就不行)。


如果您从“du”命令中删除“-h”标志,则会减少该命令的下降效果。 - Carlos Ricardo
你也可以在sort命令中使用“-h”代替“-n”。 - Sebi
仅返回翻译文本:或者将其通过 grep G 管道传递 - PyariBilli

3
du -S

du还有另一个实用的选项:-S,--separate-dirs,告诉du不包括子目录的大小 - 在某些情况下非常方便。

示例1 - 仅显示目录中的文件大小:

du -Sh  * 
3,1G    10/CR2
280M    10

示例2 - 显示目录中的文件大小和子目录:

du -h  * 
3,1G    10/CR2 
3,4G    10

3

du -sm * | sort -nr

按大小排序的输出


3
如果您想要更好地控制目录列表的大小,可以使用 threshold-t)开关,例如:
$ du -ht 1000000000 | sort --reverse

du - 磁盘使用情况
h - 以人类可读的格式输出
t - 阈值大小

在这里,我们想列出所有大小大于1GB的目录。

$ du -ht 1G | sort --reverse

说明:

维基百科中描述的单位如下:

K、M、G、T、P、E、Z、Y (1024的幂次方) 或
KB、MB、GB、TB、PB、EB、ZB、YB (1000的幂次方)。


2

提醒一下,如果您想要比较文件大小,请注意du命令会根据文件系统、块大小等不同因素产生不同的结果。

可能会出现文件大小不同的情况,例如比较本地硬盘和USB存储设备上相同目录的大小。我使用以下脚本,包括ls命令来计算目录的总大小。结果以字节为单位,考虑了所有子目录。

echo "[GetFileSize.sh] target directory: \"$1\""

iRetValue=0

uiLength=$(expr length "$1")
if [ $uiLength -lt 2 ]; then
  echo "[GetFileSize.sh] invalid target directory: \"$1\" - exiting!"
  iRetValue=-1
else
  echo "[GetFileSize.sh] computing size of files..."

  # use ls to compute total size of all files - skip directories as they may
  # show different sizes, depending on block size of target disk / file system
  uiTotalSize=$(ls -l -R $1 | grep -v ^d | awk '{total+=$5;} END {print total;}')
  uiLength=$(expr length "$uiTotalSize")
  if [ $uiLength -lt 1 ]; then
    uiTotalSize=0
  fi
  echo -e "[GetFileSize.sh] total target file size: \"$uiTotalSize\""

fi

exit "$iRetValue"

2

查看 du 命令以获取相关信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接