列出所有目录并按大小排序
尽管硬盘存储空间有限的日子似乎已经过去,但如今可以以负担得起的价格购买用于保存大容量数据的硬盘。但是,如果您觉得不需要容量更大的硬盘驱动器,但是硬盘驱动器已满,则可能表明您的系统上存储了很多垃圾数据。这正是我的情况,我需要定期清理。我更喜欢根据大小删除数据,因此第一步是从主目录中最大的目录开始。
这是我用于数据清理例程的几个bash命令:
列出所有具有相关大小的目录和文件
此命令将仅列出当前工作目录中的文件和目录。删除-s选项以查看递归输出。-h表示人类可读的输出。
$ du -sh *
列出所有目录并按大小排序
前面的命令不是很有用,因为它不会排序并打印许多我们不关心的不必要的文件。以下linux命令显示当前工作目录中的所有目录,包括以MB为单位的相关大小,并从最大到最小排序。
$ du -m --max-depth 1 | sort -rn
按大小目录列出前10名
我们的数据清理工作将通过清理发现的前10个最大目录来结束。因此,我们可能只对最大的目录感兴趣。要查找那些,让我们使用上一个命令并包含head:
$ du -m --max-depth 1 | sort -rn | head -11
列出所有目录并按大小bash脚本排序
使用上面的命令,我们可以创建一个bash脚本来简化我们的生活。以下bash脚本将接受2个参数。第一个参数将是一个目录名称,我们将在该目录中开始搜索,第二个参数将按脚本应输出的目录数量进行搜索。
#!/bin/bash if [ $# != 2 ]; then echo "Incorrect number of arguments !" >&2 echo "USAGE: sortdirbysize [DIRECTORY] " fi du --block-size=1M --max-depth 1 $1 | sort -rn | head -$2
例:
$ ./sort-dir-by-size.sh /home/linux 15