Linux列出10个最大的子目录

$du -h --max-depth=1 2> /dev/null | sort -hr | tail -n +2 | head

用于按大小列出目录的 Bash 脚本

我们可以把命令放入 Bash 脚本中:

#!/bin/bash 

if [ $# != 2 ]; then 
	echo "Incorrect number of arguments !" >&2 
	echo "USAGE: sortdirbysize [DIRECTORY] <first n directories>" 
fi 
du -h --max-depth=1 $1 2> /dev/null | sort -hr | tail -n +2 | head -$2

用法:

第一个参数将是一个目录名称,我们将其中开始搜索,第二个参数将是脚本应输出的多个目录。

列出 /home/linux 中最大的15个文件或者子目录:

$./sort-dir-by-size.sh /home/linux 15
Linux列出所有目录并按大小排序

df 和 du 命令行实用程序是我们在 Linux 上测量磁盘消耗的两个最佳工具。

对于按文件夹检查磁盘使用情况,du命令特别有用。

直接运行 du时,将单独检查每个子目录的总磁盘使用情况。
根据文件夹结构的深度,这可能是大量目录,并且终端将收到大量输出的垃圾邮件。

在下面的例子中,我们在一个充满 Linux ISO 文件的目录上运行 du,但它只有一个目录深。
我们将添加-h(人类可读)选项,以便更容易查看这些目录消耗的磁盘空间。

$du -h
11G     ./AlmaLinux
671M    ./Arch Linux
14G     ./CentOS
349M    ./Debian
1.9G    ./Fedora
415M    ./Gentoo
6.5G    ./Kali Linux
9.4G    ./Ubuntu
44G     .

如果我们有更深的文件夹结构会发生什么。

$du -h
671M    ./Arch Linux
6.5G    ./Debian-based/Kali Linux
9.4G    ./Debian-based/Ubuntu
17G     ./Debian-based
415M    ./Gentoo
11G     ./RHEL-based/AlmaLinux
14G     ./RHEL-based/CentOS
1.9G    ./RHEL-based/Fedora
27G     ./RHEL-based
44G     .

这使我们可以相当详细地了解每个子目录使用了多少空间。
如果你有一个很深的结构,我们可以使用--max-depth = N标志来告诉du它应该遍历多少个子目录深度。

$du -h --max-depth=1
671M    ./Arch Linux
17G     ./Debian-based
415M    ./Gentoo
27G     ./RHEL-based
44G     .

要按大小对这些目录进行排序,可以使用sort

$du -h | sort -h
415M    ./Gentoo
671M    ./Arch Linux
1.9G    ./RHEL-based/Fedora
6.5G    ./Debian-based/Kali Linux
9.4G    ./Debian-based/Ubuntu
11G     ./RHEL-based/AlmaLinux
14G     ./RHEL-based/CentOS
17G     ./Debian-based
27G     ./RHEL-based
44G     .

或者,限制递归遍历的目录数:

$du -h --max-depth=1 | sort -h
415M    ./Gentoo
671M    ./Arch Linux
17G     ./Debian-based
27G     ./RHEL-based
44G     .

查看指定目录中文件和子目录的大小:

$du -h /home/onitroad

如果在根目录中运行du,则会收到很多“permission denied 权限被拒绝”的信息。
可以将这些标准错误重定向到 /dev/null进行丢弃:

$sudo du -h --max-depth=1 /| sort -h 2> /dev/null
日期:2020-07-07 20:56:50 来源:oir作者:oir