如何获取当前目录中最大的10个文件夹(不是文件或子文件夹)?

如何获取当前目录中最大的10个文件夹(不是文件或子文件夹)?

我想找到当前目录中最大的 10 个文件夹,并且文件夹大小易于理解?我见过的示例都是将文件与文件夹一起列出。我只是想看看哪些文件夹占用了最多的空间,因为每个文件夹都被不同的用户使用。

以下是我尝试过的代码

du -hs * | sort -rh | head -10

答案1

通配符

du -hs *代码中包含裸*通配符模式。你的 shell 会将其扩展为几乎所有文件在当前目录中,因此通常du会获取多个参数:目录和非目录。

“几乎”,因为*不匹配以点 ( .) 开头的名称。这些是隐藏的。在 Bash 中,您可以通过调用来改变这种行为shopt -s dotglob

要仅匹配目录,请在模式后附加一个尾部斜杠:

du -hs */ | sort -rh | head -10

如果目录太多,这个简单的解决方案就会失败。错误将是argument list too long


find

对符合某些条件的文件执行某些操作的通用方法是find。解决您的案例的命令比上面的更复杂。我在这里发布它主要是作为想要添加更多条件(尤其是无法轻松包含在解决方案中的条件)find的用户的起点:*/

find . -type d ! -name . -prune -exec du -hs {} + | sort -rh | head -10

意思是:从 开始查找所有不是 ( ).的目录类型文件 ( )。不要深入其中 ( ) 。执行零次或多次,将找到的文件的多个路径名可能传递给一次( ) 调用。-type d.! -name .-prunedu -hsdu-exec du … {} +

此解决方案不会触发,argument list too long因为足够智能,如果需要,find可以运行多个,因此每个都会获得一个不太长的列表。如果您需要一个强大的解决方案(例如,在无需监督的情况下工作的脚本中),那么最好使用通配符。dudufind


ncdu

一种交互式的方法是ncdu确实,它会随目录一起显示非目录,但您可以轻松地区分它们(观察前导斜杠)或切换“排序时将目录放在 [其他] 文件之前”(t)。

相关内容