我想找到当前目录中最大的 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 .
-prune
du -hs
du
-exec du … {} +
此解决方案不会触发,argument list too long
因为足够智能,如果需要,find
可以运行多个,因此每个都会获得一个不太长的列表。如果您需要一个强大的解决方案(例如,在无需监督的情况下工作的脚本中),那么最好使用通配符。du
du
find
ncdu
一种交互式的方法是ncdu
确实,它会随目录一起显示非目录,但您可以轻松地区分它们(观察前导斜杠)或切换“排序时将目录放在 [其他] 文件之前”(t)。