我想按大小从大到小的顺序列出所有文件,并且这些文件可以存在于某个文件夹中的任何位置。
答案1
只需使用类似的东西:
ls -lS /path/to/folder/
首都S。
这将按大小对文件进行排序。
另请参阅:
-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 -k
和sort -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)
如果您想要包含隐藏文件(其名称以点开头,除了.
和..
)并在隐藏目录中搜索,请添加D
globbing 限定符:
print -rC1 -- **/*(ND.OL)
答案4
说“文件可能存在于某个文件夹中的任何位置”意味着您想要递归地向下遍历起始目录(文件夹)中的所有目录(文件夹)。这就是find
要做的事情:
find . -type f -exec ls -lSd {} +
这“找到”了所有文件在当前工作目录 ( .
) 中。对于找到的每个文件,ls
都会运行一个进程来按大小顺序对找到的对象进行排序。的终止符+
导致-exec
多个参数作为列表传递给ls
。除非您的目录(文件夹)包含大量文件,否则您应该有一个列表(因此会分叉一个进程),从而获得您想要的结果。