如何列出按大小排序的所有文件

Joe*_*Joe 317 linux ls files

我想按大小从大到小的顺序列出所有文件,这些文件可以存在于某个文件夹中的任何位置。

小智 378

只需使用类似的东西:

ls -lS /path/to/folder/
Run Code Online (Sandbox Code Playgroud)

资本小号

这将按大小对文件进行排序。

另见:

man ls

-S     sort by file size
Run Code Online (Sandbox Code Playgroud)

如果要倒序排序,只需添加-r开关。

更新:

要排除目录(并提供所有文件名或符号链接目标都不包含换行符):

ls -lS | grep -v '^d' 
Run Code Online (Sandbox Code Playgroud)

更新 2:

我现在看到它如何仍然显示符号链接,这可能是文件夹。符号链接总是以字母 l 开头,就像在链接中一样。

更改命令以筛选-. 这应该只留下常规文件:

ls -lS | grep '^-'
Run Code Online (Sandbox Code Playgroud)

在我的系统上,这仅显示常规文件。

更新3:

要添加递归,我会将行的排序留给sort命令,并告诉它使用第 5 列进行排序。

ls -lR | grep '^-' | sort -k 5 -rn
Run Code Online (Sandbox Code Playgroud)

-rn表示反向和数字以在顶部获取最大的文件。此命令的缺点是它不显示文件的完整路径。

如果您确实需要文件的完整路径,请使用以下内容:

find . -type f  -exec du -h {} + | sort -r -h
Run Code Online (Sandbox Code Playgroud)

find命令将递归查找所有子目录中的所有文件.并调用du -h(意味着磁盘使用 -humanreadable),然后再次对输出进行排序。如果您的find/sort不支持-h,请替换为du -ksort -rn。请注意,大小磁盘使用情况不是一回事。

  • `du` 给出了与文件大小不同的磁盘使用情况。使用 (GNU) `du -h`,数字排序将不起作用(你需要 `-h` GNU 选项来排序)。xargs 期望一个可能引用的单词列表作为输入,因此如果文件名包含空格或引用字符,它将不起作用。 (5认同)
  • 关注@StéphaneChazelas,这对我有用:`find 。-type f -print0 | xargs -0 du -h | 排序 -rh`。如果你只想说最大的 30 个文件:`find . -type f -print0 | xargs -0 du -h | 排序 -rh | 头-n 30`。 (3认同)

Mar*_*hen 32

您可以使用查找和排序之类的东西。

find . -type f -ls | sort -r -n -k7
Run Code Online (Sandbox Code Playgroud)

(该-ls选项不是标准的,但在许多 find 实现中都可以找到,不仅仅是 GNU 的。在 GNU find 和其他中,它显示类似的内容,但ls -li有一些例外,例如,带有 ACL 的文件没有用 + 标记)

如果文件名可能包含换行符,用 GNU find 和 GNU sort:

find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'
Run Code Online (Sandbox Code Playgroud)


Sté*_*las 15

使用 zsh 和 GNU ls:

ls -ldU -- **/*(.OL)
Run Code Online (Sandbox Code Playgroud)

哪里(.OL)水珠预选赛.选择正规仅文件,OL由长反序(文件大小,o 按升序排列,O降序)。

(请注意,旧版本的 zsh 存在文件大小超过 2^32 的问题)。

某些操作系统对传递给命令的参数列表的大小有限制。在这些情况下,您需要:

autoload -U zargs
zargs ./**/*(.OL) -- ls -ldU
Run Code Online (Sandbox Code Playgroud)

如果您只想要文件列表而不是详细输出,请执行以下操作:

print -rl -- **/*(.OL)
Run Code Online (Sandbox Code Playgroud)

如果要包含隐藏文件(名称以点开头,除了...)并在隐藏目录中搜索,请添加D通配符:

print -rl -- **/*(.DOL)
Run Code Online (Sandbox Code Playgroud)


Bak*_*ker 10

按大小升序列出文件将是:

ls -lSr
Run Code Online (Sandbox Code Playgroud)

选项是:

  • l:long,显示详细的用户、组、其他属性、日期等。
  • S:按尺寸列出的订单(默认降序)
  • r:颠倒列表顺序


JRF*_*son 8

说“文件可以存在于某个文件夹中的任何地方”意味着您要递归地将所有目录(文件夹)放在起始目录(文件夹)中。这就是要做的find事情:

find . -type f -exec ls -lSd {} +
Run Code Online (Sandbox Code Playgroud)

这将“查找”当前工作目录 ( )中的所有文件.。对于找到的每个文件,ls运行一个进程以按大小顺序对找到的对象进行排序。的+终止符-exec导致多个参数作为列表传递给ls。除非你的目录(文件夹)包含大量文件,否则你应该有一个列表(因此一个进程分叉),导致你想要的结果。


小智 6

文件列表按倒序显示:ls -lSrh

对于升序:ls -lSh