Directory 无法通过ls获取目录的大小

Directory 无法通过ls获取目录的大小,directory,ls,Directory,Ls,我运行命令以获取目录的大小失败(其中的文件属于目录的大小) 我得到的目录大小只有千位,而它们的内容不止这些 如何按ls列出目录的大小,包括目录中的内容? ls将为您提供目录项的大小,而不是目录内容的大小。根据我对manls的快速浏览,似乎没有一种方法可以让ls深入并计算目录的大小(很可能是因为这将是一个昂贵的操作)。如果您想获得目录的大小,可以使用 du -sh du-hs在拥有一个大目录之前是非常棒的 例如,如果您使用分区模式(如“cache/123/456/789/real_files”)

我运行命令以获取目录的大小失败(其中的文件属于目录的大小)

我得到的目录大小只有千位,而它们的内容不止这些

如何按ls列出目录的大小,包括目录中的内容?


ls
将为您提供目录项的大小,而不是目录内容的大小。根据我对
manls
的快速浏览,似乎没有一种方法可以让
ls
深入并计算目录的大小(很可能是因为这将是一个昂贵的操作)。

如果您想获得目录的大小,可以使用

du -sh

du-hs
在拥有一个大目录之前是非常棒的

例如,如果您使用分区模式(如“cache/123/456/789/real_files”)存储缓存文件(例如Rails的文件系统缓存存储)或上载的文件,…并且您有很多这样的文件,
du
会花费很长时间,最终会阻塞所有IO


我没有更好的解决方案,但在高峰时间在生产服务器上运行此解决方案之前,需要考虑这一点。

基于Sean Bright的答案,您可以执行以下操作(在BASH中)


这将获得当前目录中所有目录的完整目录内容

在Windows上可用的任何类型的ls上(我检查了Cygwin、GnuWin32和MSYS),目录的大小都为零。你甚至看不到目录项列表的大小,就像(大多数?*nix)风格一样。我没有找到一个选项来根据大小排列目录。你怎么能这么做?那是因为杜没有这样的选择。您可以通过管道将输出设置为“排序”。
du -sh directory_name
du -sh
for each in $(echo */ | sed "s/ /\n/g" | sed "s/\///g");  do du -hs "$each"; done;