是否有可能在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
在翻遍了手册之后,我一无所获。
是否有可能在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
在翻遍了手册之后,我一无所获。
当前回答
find . -maxdepth 1 -exec du --apparent-size --max-depth=0 --null '{}' ';' |\
sort -k1 -nr --zero-terminated |\
cut -f2 --zero-terminated |\
xargs --null -n 1 du -h --apparent-size --max-depth=0
特点:
由于Linux文件名可以有换行符或空格,所以我们使用空字符来分隔文件/目录名。 我们根据文件/目录的大小对它们进行排序。 我们用——-size和du来得到类似于ls的行为。
其他回答
试着这样做:
du -sh *
简写版:
du --summarize --human-readable *
解释:
du:磁盘使用率
-s:显示每个指定文件的摘要。(相当于-d 0)
-h: "人类可读"输出。使用单位后缀:Byte, Kibibyte (KiB), Mebibyte (MiB), Gibibyte (GiB), Tebibyte (TiB)和Pebibyte (PiB)。(BASE2)
我遇到了一个类似于Martin Wilde描述的问题,在我的例子中,在使用rsync镜像后比较两个不同服务器上的相同目录。
我没有使用脚本,而是向du添加了-b标志,它以字节为单位计算大小,据我所能确定,消除了两台服务器上的差异。您仍然可以使用-s -h来得到一个可理解的输出。
看一下du命令
find . -maxdepth 1 -exec du --apparent-size --max-depth=0 --null '{}' ';' |\
sort -k1 -nr --zero-terminated |\
cut -f2 --zero-terminated |\
xargs --null -n 1 du -h --apparent-size --max-depth=0
特点:
由于Linux文件名可以有换行符或空格,所以我们使用空字符来分隔文件/目录名。 我们根据文件/目录的大小对它们进行排序。 我们用——-size和du来得到类似于ls的行为。
du -h --max-depth=1 . | sort -n -r