Shell 如何按名称查找文件夹,然后按大小排序

Shell 如何按名称查找文件夹,然后按大小排序,shell,sorting,Shell,Sorting,抱歉,我确信这是许多排列中的一个常见问题。然而,我又问了一次,因为到目前为止我还没有找到我的问题的确切答案 目标:找到包含字符串“foo”的所有文件夹,然后按大小对其进行排序(或者:不进行排序,只返回大于大小N的文件夹)。 或者,我可以问:如何按大小对“find”的输出进行排序。(在Stackoverflow上已经提出了这个问题,但到目前为止没有得到回答) 这是我已经试过的 返回大于100 MB的所有文件夹。无法工作,因为文件夹大小始终为0 find / -iname "*foo*" -size

抱歉,我确信这是许多排列中的一个常见问题。然而,我又问了一次,因为到目前为止我还没有找到我的问题的确切答案

目标:找到包含字符串“foo”的所有文件夹,然后按大小对其进行排序(或者:不进行排序,只返回大于大小N的文件夹)。

或者,我可以问:如何按大小对“find”的输出进行排序。(在Stackoverflow上已经提出了这个问题,但到目前为止没有得到回答)

这是我已经试过的

返回大于100 MB的所有文件夹。无法工作,因为文件夹大小始终为0

find / -iname "*foo*" -size +100M
使用find的输出选项'-ls',然后排序。也不起作用:它是按大小排序的

find / -iname "*foo*" -ls | sort
感谢您的帮助


编辑:我想我刚刚在右侧显示的相关主题中找到了答案。。。再次道歉,我知道我应该更彻底地搜索:/

您可以将此
查找
统计和
排序一起使用:

find / -iname "*foo*" -type d -size +100M -exec stat -c '%n:%s' {} \; | sort -t: -k2,2 -rn | cut -d ':' -f1
-n表示数字排序-k7是要排序的字段(使用包含大小的数字,7在bashshell中)


如果您只需要文件夹的名称(按文件夹的大小),您似乎了解其中文件的大小之和,可能还了解其中所有子目录的大小之和。如果是这样,
du
最适合该任务

du / | grep foo | sort -n

谢谢:)似乎不起作用,也许是因为我在OSX上?我也在OSX上。只需将stat-c“%n:%s”替换为stat-f“%n:%z”
。最后一个命令:
find/-iname“*foo*”-type d-size+100M-exec stat-f'%N:%z'{}\|sort-t:-k2,2-rn | cut-d':'-f1
我可能是错的,但似乎“-size+N”导致查找不返回一个目录。这可能是因为我在OSX上使用的是
home brew
,并且使用的是gnu实用程序。试试看:
find/-iname“*foo*”-type d-exec stat-f'%N:%z'{}\|sort-t:-k2,2-rn | cut-d':'-f1
我非常抱歉对这一点一无所知,但它不起作用。一般来说,可以肯定的是:如果我调用'ls-la',我应该看到目录大小吗?如果是这样的话,当我使用它时,它似乎不会发生。
find . -iname "*foo*" -type d -ls|sort -nk7|sed "s/^[^:]*:[^\ ]*\ //g" 
du / | grep foo | sort -n