按排序顺序显示文件大小

按排序顺序显示文件大小

如何在命令行中显示按文件大小降序排列的某个目录根目录中的文件列表?

答案1

从您的文件夹:

find . -maxdepth 1 -type f -exec du -h {} + | sort --human-numeric-sort --reverse

-maxdepth您可以设置使用参数或不使用参数进行递归查找文件的深度。

答案2

如果要递归列出目录中的所有内容,请使用find或:dusort

find /some/path -type f -printf '%s %p\n' | sort -rn
du -h /some/path | sort -rh

前者将仅显示文件及其大小(以字节为单位)。后者将以人性化(使用 KB、MB 等)格式显示文件和累计目录大小。sort因此,前者使用数字(-n),后者使用人性化(-h)。


随着复杂性的增加,最好的选择是:

find /some/path -type f -print0 | du --files0-from=- -0h | sort -rzh | tr '\0' '\n'

du可以从输入中读取以 NUL 分隔的文件列表,并且find可以使用打印以 NUL 分隔的文件名-print0sort然后可以获取以 NUL 分隔的大小和文件名列表并对其进行排序,最后用换行符替换 NUL 以方便显示。

由于文件名和路径可以包含除 ASCII NUL 字符之外的任何内容,因此使用 NUL 分隔的行来处理它们是最安全的方法。

您还可以find打印第一个命令中显示的尺寸,但-printf '%s %p\0'仍然使用 NUL 分隔的行,并且跳过使用du中间人。

答案3

正如@Terrance所说,ls -lS按降序对文件进行排序。对于所有文件,ls -lSa都有效。

答案4

此命令将按 kb 大小排序

du -sk * | sort -n

您可以使用以下方法逆转它:

du -sk * | sort -rn

相关内容