是否有可能在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
在翻遍了手册之后,我一无所获。
当前回答
以人类可读的格式列出当前目录中最大的目录:
Du -sh * | sort -hr
一个更好的限制行数的方法是
Du -sh * | sort -hr | head -n10
在哪里可以增加-n标志的后缀来限制列出的行数
示例:
[~]$ du -sh * | sort -hr
48M app
11M lib
6.7M Vendor
1.1M composer.phar
488K phpcs.phar
488K phpcbf.phar
72K doc
16K nbproject
8.0K composer.lock
4.0K README.md
这样读起来更方便:)
其他回答
这里需要注意的是,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 -sh * | sort -hr
一个更好的限制行数的方法是
Du -sh * | sort -hr | head -n10
在哪里可以增加-n标志的后缀来限制列出的行数
示例:
[~]$ du -sh * | sort -hr
48M app
11M lib
6.7M Vendor
1.1M composer.phar
488K phpcs.phar
488K phpcbf.phar
72K doc
16K nbproject
8.0K composer.lock
4.0K README.md
这样读起来更方便:)
嗯,最好的方法是使用这个命令:
du -h -x / | sort -hr >> /home/log_size.txt
然后你就可以在你的服务器上获得所有大小的文件夹。轻松帮助您找到最大的尺寸。
要以ls -lh格式显示,请使用:
(du -sh ./*; ls -lh --color=no) | awk '{ if($1 == "total") {X = 1} else if (!X) {SIZES[$2] = $1} else { sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); print $0} }'
Awk代码解释:
if($1 == "total") { // Set X when start of ls is detected
X = 1
} else if (!X) { // Until X is set, collect the sizes from `du`
SIZES[$2] = $1
} else {
// Replace the size on current current line (with alignment)
sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0);
print $0
}
样例输出:
drwxr-xr-x 2 root root 4.0K Feb 12 16:43 cgi-bin
drwxrws--- 6 root www 20M Feb 18 11:07 document_root
drwxr-xr-x 3 root root 1.3M Feb 18 00:18 icons
drwxrwsr-x 2 localusr www 8.0K Dec 27 01:23 passwd
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的行为。