是否有可能在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
在翻遍了手册之后,我一无所获。
当前回答
如果你想要更多地控制目录列表的大小,你可以使用阈值(-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的幂)。
其他回答
要以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的行为。
嗯,最好的方法是使用这个命令:
du -h -x / | sort -hr >> /home/log_size.txt
然后你就可以在你的服务器上获得所有大小的文件夹。轻松帮助您找到最大的尺寸。
您需要的命令是'du -sk' du = "磁盘使用率"
-k标志提供以千字节为单位的输出,而不是磁盘扇区的du默认值(512字节块)。
-s标志将只列出顶级目录(即默认情况下的当前目录或命令行上指定的目录)中的内容。奇怪的是,在这方面du和ls表现相反。默认情况下,du将递归地提供每个子目录的磁盘使用情况。相反,ls只会给出指定目录下的列表文件。(ls -R提供递归行为。)
这里需要注意的是,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}'
这将为您提供目录中所有文件的总大小。