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

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

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

答案1

只需使用类似的东西:

ls -lS /path/to/folder/

首都S

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

另请参阅:

man ls

-S     sort by file size

如果你想排序撤销命令,只需添加-r开关即可。

更新:

排除目录(并且假设文件名或符号链接目标都不包含换行符):

ls -lS | grep -v '^d' 

更新2:

我现在看到它仍然显示符号链接,可能是文件夹。符号链接始终以字母 l 开头,如 link 中所示。

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

ls -lS | grep '^-'

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

更新3:

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

ls -lR | grep '^-' | sort -k 5 -rn

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

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

find . -type f  -exec du -h {} + | sort -r -h

该命令将递归地查找并调用find所有子目录中的所有文件(意思是.du -h磁盘使用情况-人类可读),然后再次对输出进行排序。如果您的find/sort不支持-h,请替换为du -ksort -rn。注意尺寸磁盘使用情况不是同一件事。

答案2

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

find . -type f -ls | sort -r -n -k7

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

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

find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'

答案3

使用 zsh 和 GNU ls:

ls -ldU -- **/*(.OL)

哪里(.OL)有一个全局限定符.选择常规的仅文件,OL按长度反转顺序(文件大小,o 升序,O降序)。

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

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

autoload -U zargs
zargs ./**/*(.OL) -- ls -ldU

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

print -rC1 -- **/*(N.OL)

如果您想要包含隐藏文件(其名称以点开头,除了...)并在隐藏目录中搜索,请添加Dglobbing 限定符:

print -rC1 -- **/*(ND.OL)

答案4

说“文件可能存在于某个文件夹中的任何位置”意味着您想要递归地向下遍历起始目录(文件夹)中的所有目录(文件夹)。这就是find要做的事情:

find . -type f -exec ls -lSd {} +

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

相关内容