是否有可能在Unix中使用ls列出子目录的总大小及其所有内容,而不是通常的4K(我假设)只是目录文件本身?

total 12K
drwxrwxr-x  6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk

在翻遍了手册之后,我一无所获。


当前回答

从ls中只检索以字节为单位的大小。

ls -ltr | head -n1 | cut -d' ' -f2

其他回答

Du -sch *在同一目录下。

这里需要注意的是,du给出的是磁盘使用率。不同的机器可以使用不同的块大小,因此在一台机器上一个块可以是4096字节,而另一台机器可以包含2048字节的块大小。如果我在一台使用4096字节块的机器中放入10个1字节文件,在一台使用2048字节块的机器中放入10个1字节文件,du -h将分别报告~40k和~20k。

如果你想知道一个目录中所有文件的大小,对于每个目录,你可以这样做:

for x in ./*;
do
    if [[ -f "$x" ]]; then
        ls -al "$x"
    fi
done | awk '{print $6}' | awk '{s+=$1}END{print s}'

这将为您提供目录中所有文件的总大小。

这些都是很好的建议,但我用的是:

du -ksh * | sort -n -r

-ksh确保文件和文件夹以人类可读的格式列出,并以兆字节、千字节等为单位。然后你对它们进行数值排序,然后反转排序,让大的放在前面。

这个命令唯一的缺点是,计算机不知道千兆字节比兆字节大,所以它只会按数字排序,你经常会发现这样的列表:

120K
12M
4G

只是要仔细观察单位。

该命令也适用于Mac(而sort -h则不能)。

我遇到了一个类似于Martin Wilde描述的问题,在我的例子中,在使用rsync镜像后比较两个不同服务器上的相同目录。

我没有使用脚本,而是向du添加了-b标志,它以字节为单位计算大小,据我所能确定,消除了两台服务器上的差异。您仍然可以使用-s -h来得到一个可理解的输出。

如果你想要更多地控制目录列表的大小,你可以使用阈值(-t)开关,如下所示:

$ du -ht 1000000000 | sort --reverse

磁盘使用率 人可读的格式 T -阈值大小

在这里,我们想要列出大小大于1GB的所有目录。

$ du -ht 1G | sort --reverse

解释:

wiki中描述的单位如下:

K, M, G, T, P, E, Z, Y(1024的幂)或 KB, MB, GB, TB, PB, EB, ZB, YB(1000的幂)。