如何在命令行中显示按文件大小降序排列的某个目录根目录中的文件列表?
答案1
从您的文件夹:
find . -maxdepth 1 -type f -exec du -h {} + | sort --human-numeric-sort --reverse
-maxdepth
您可以设置使用参数或不使用参数进行递归查找文件的深度。
答案2
如果要递归列出目录中的所有内容,请使用find
或:du
sort
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 分隔的文件名-print0
。sort
然后可以获取以 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