#1 楼
只需使用以下内容:ls -lS /path/to/folder/
大写S。
这将按大小对文件进行排序。
也请参见:
man ls
-S sort by file size
如果要以相反的顺序排序,只需添加
-r
开关。更新:
要排除目录(且文件名或符号链接目标均不包含换行符):
ls -lS | grep -v '^d'
更新2:
我现在看到它仍然如何显示符号链接,它可能是文件夹。与链接一样,符号链接始终以字母l开头。
更改命令以过滤
-
。这应该只保留常规文件: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
。请注意,大小和磁盘使用情况不是同一回事。评论
du给出的磁盘使用情况与文件大小不同。使用(GNU)du -h,数字排序将不起作用(您需要使用-h GNU选项进行排序)。 xargs期望使用可能带引号的单词的列表作为输入,因此,如果文件名包含空格或带引号的字符,它将不起作用。
–StéphaneChazelas
2012年11月3日23:57
我看到-S大小按降序排列,那么升序呢?
–魔鬼
16 Mar 8 '16 at 15:40
在@StéphaneChazelas之后,这对我有用:find。型f -print0 | xargs -0 du -h |排序-rh。如果您只想说最大的30个文件:查找。型f -print0 | xargs -0 du -h |排序-rh |头-n 30。
–user7543
16年5月16日在11:13
嗨!您能否解释一下+ | + |中的语法-r -h排序?
–维克多
18年9月9日在11:44
@Victor,请参阅unix.stackexchange.com/questions/195939/…。
–休·沃尔夫
18年11月27日,0:33
#2 楼
您可以使用诸如find和sort之类的东西。等等,它显示类似于-ls
的内容,但有一些例外,例如,带有ACL的文件未标有+)如果文件名可能包含换行符,则使用GNU find和GNU sort :
find . -type f -ls | sort -r -n -k7
评论
假设“组”列(来自-ls)不包含任何空格(因此-k 7参数),但不一定如此。
–kolistivra
2014年11月3日16:00
为什么不简单地执行find ... -print0 | -zk7rn0排序?
–安德烈·德·米兰达(Andre de Miranda)
16-9-28在10:24
谢谢,这对我很有用,当我正在寻找一些大型的隐藏文件时,如果我的Mac空间不足,该文件将被删除:)
–山姆聊天
19年11月2日在16:49
#3 楼
对于zsh和GNU ls:ls -ldU -- **/*(.OL)
其中
(.OL)
是全局限定符,.
仅选择常规文件,OL
按长度反向(文件大小,o
升序)顺序,O
为降序)。(请注意,较早版本的zsh的文件大小超过2 ^ 32时会出现问题)。
某些操作系统对大小有限制传递给命令的参数列表。在这种情况下,您需要:
autoload -U zargs
zargs ./**/*(.OL) -- ls -ldU
如果只需要文件列表而不是详细的输出,只需执行:
print -rl -- **/*(.OL)
如果要包含隐藏文件(其名称以点号开头,
.
和..
除外)并搜索隐藏目录,请添加D
全局限定符:print -rl -- **/*(.DOL)
评论
.OL做什么?这是命令的一部分吗?
–alpha_989
18年6月12日在15:36
@ alpha_989,请参阅编辑
–StéphaneChazelas
18年6月12日在15:44
感谢您的解释,Stephane ..但是,由于某些原因..该命令在我的工作站上不起作用..我正在使用ls(GNU coreutils)8.25和zsh 5.1.1(x86_64-ubuntu-linux-gnu)。它仅适用于某些版本的ls和zsh吗?
–alpha_989
18年6月12日在18:18
@ alpha_989,它对您不起作用?它对我来说适用于那些相同的版本,并且该代码中没有任何东西至少在15年前的版本中不起作用。
–StéphaneChazelas
18年6月12日在20:40
#4 楼
按大小递增的列表文件为:ls -lSr
选项为:
l:长,显示详细的用户,组,其他属性,日期等。
S:按大小列出的订单(默认情况下递减)
r:反转列表的顺序
评论
您介意解释提高答案质量的选项吗?
– Rui F Ribeiro
16年6月29日在18:53
#5 楼
说“文件可能存在于某个文件夹中的任何位置”意味着您要递归地降级起始目录(文件夹)中的所有目录(文件夹)。这是find
的作用:find . -type f -exec ls -lSd {} +
这“查找”当前工作目录(
.
)中的所有文件。对于找到的每个文件,运行一个ls
进程以按大小顺序对找到的对象进行排序。 +
的-exec
终止符导致将多个参数作为列表传递给ls
。除非您的目录(文件夹)包含大量文件,否则您应该只有一个列表(因此要分叉一个进程),从而得到想要的结果。评论
这很好,因为它允许您在ls上使用-h修饰符以显示好的文件大小
– shmish111
15年5月16日在8:48
#6 楼
试试这些,对我来说很好用。 />$ ls -lS |grep '^-' | head -n 6
评论
如果文件名不包含任何空格,则awk可以正常工作。
– Eir Nym
16 Mar 20 '16 at 8:01
是的..使用'sed'并用下划线替换空格吗?如果有帮助
–桑杰·拉维(Sandjaie Ravi)
16年4月12日在9:29
不,我用sed削减输出
– Eir Nym
16年4月12日在11:21
#7 楼
以相反的顺序显示文件列表:ls -lSrh
以升序显示:
ls -lSh
评论
+1用于将-h标志用于人性化输出。
–computingfreak
16年7月3日,0:34
#8 楼
我前一段时间写了一些东西。您可以传递一个参数来指定要列出的文件数量,或者只键入big
,在这种情况下,您将获得10。big () {
NUM_FILES=10;
if [ ]; then
NUM_FILES=;
fi;
du | sort -nr | head -n $NUM_FILES
}
#9 楼
添加到delh的答案和StéphaneChazelas的评论中...find -print0
与xargs -0
结合使用,增加了对空格/空格/诸如此类的支持。倍数,例如在128K之后将显示1.1M,这是错误的。du -h | sort -rn
(--human-numeric-sort)可以解决这个问题,但仅适用于GNU版本。下面的命令将提供所需的输出。
人类可读的,在GNU的sort / Linux上:
sort -rh
/ OSX /其他:
find . -type f -print0 | xargs -0 du -h | sort -rh
对于BSD / OSX,另请参见https://unix.stackexchange.com/a/188375/82895。
#10 楼
作为原始问题的变体,如果您想查看子目录中文件的累积大小,请执行以下操作: #!/bin/bash
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr
大小将以兆字节(
m
中的du -sm
)显示。 du
接受的其他值是-k
(千字节)和-g
(千兆字节)。无法使用-h
进行人类可读的显示,因为它将破坏排序。这是一个使用
sed
附加M
的版本,表示兆字节: find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr | sed -E 's/^([0-9]+)/M/g'
通过
${1:-.}
设置要显示的目录,如果提供的话,它将使用第一个命令行参数;如果不带参数调用,则使用当前目录。注意:这可能需要很长时间才能处理很多文件。选项
-type d
将仅列出子目录并排除当前文件夹中的文件。如果您还想查看当前文件夹中的文件,请删除它。 注意:您可能要改用
ncdu
,它在大多数linux仓库(在ubuntu / debian apt install ncdu
上)以及osx(brew install ncdu
)上都可用。 />
评论
相关的unix.stackexchange.com/questions/88065/…来自man ls:-S按文件大小排序
您是说“文件在此目录中”还是“文件可能在任何子目录中”。
如果您能够/想要使用GUI工具,请查看QDirStat(以前为KDirStat)。