在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手册后,我毫无头绪。
我总是使用du -sk
(-k
标志以千字节显示文件大小)。
这是我喜欢的方式
更新: 我不喜欢之前的翻译,因为它没有显示当前目录中的文件,只列出了目录。
在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
在同一目录下使用“du -sch *”命令。
du -h .
du -h --max-depth=1 .
这些都是很好的建议,但我使用的是:
du -ksh * | sort -n -r
-ksh
命令会以人类可读的方式列出文件和文件夹,并将它们按兆字节、千字节等单位排序。然后您可以对它们进行数字排序并反转排序,以便将较大的文件排在前面。
这个命令唯一的缺点是计算机不知道千兆字节比兆字节大,因此它只会按数字排序,您经常会发现像这样的列表:
120K
12M
4G
请注意单位。
这个命令在Mac上也可以使用(例如sort -h
就不行)。
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
du -sm * | sort -nr
按大小排序的输出
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的幂次方)。
提醒一下,如果您想要比较文件大小,请注意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"
查看 du
命令以获取相关信息。
alias ducks='du -cksh * | sort -hr | head -n 15'
。该命令将显示当前目录下占用磁盘空间最多的前15个文件或文件夹,并按照从高到低的顺序排列。 - Sebialias ducks='du -cksh * | sort -hr | head -n 15'
中的-h
选项和du
的-c
选项大多是非便携式 GNU 扩展,而不是 POSIX 标准du
和sort
实用程序。如果没有-h
选项,则必须使用-n
选项调用sort
进行数字排序,简化为:du -sk * | sort -n
。 - Andrew Henlesort
中省略-r
,并且不通过head
(或tail
)传递结果,将整个结果发送到终端,最大的结果最后显示。这在交互式会话中非常有用。请注意,*
将跳过以.
开头的文件和目录,例如.m2
。 - Andrew Henle