`ls -lS` 没有显示目录的真实大小

`ls -lS` 没有显示目录的真实大小

ls -lS在我的主目录中使用了命令。该命令应该按大小列出目录的内容。这是我运行此命令后得到的结果

total 10148
-rw-rw-r--  1 rahul rahul 8053159 May 15 15:35 Costa_ODE.pdf
-rw-rw-r--  1 rahul rahul 1755507 May 15 17:33 gnuplot.pdf
-rw-rw-r--  1 rahul rahul  218048 May 13 22:14 out.log
-rw-rw-r--  1 rahul rahul   98131 Feb 16 01:53 hs_err_pid8639.log
-rw-rw-r--  1 rahul rahul   12364 Apr 19 14:01 Untitled 1.csv
drwxr-xr-x  4 rahul rahul   12288 Jun  6  2016 cfitsio
-rw-r--r--  1 rahul rahul    8980 Feb  7  2016 examples.desktop
drwxrwxr-x  2 rahul rahul    4096 Mar 10 12:24 bin
drwxrwxr-x  8 rahul rahul    4096 May  8 14:51 boxfitv2
drwxrwxrwx  2 rahul rahul    4096 Jan 30 11:50 dao2
drwxrwxr-x  2 rahul rahul    4096 Mar 12  2016 deja-dup
drwxr-xr-x  6 rahul rahul    4096 May 16 02:12 Desktop
drwxr-xr-x  3 rahul rahul    4096 May 15 10:53 Documents
drwxr-xr-x  5 rahul rahul    4096 May  8 14:09 Downloads
.
.
.
.

这是一个相当大的清单。但我希望您关注子目录,例如桌面。其大小显示为 4096 字节。但是当我尝试查看桌面的详细信息时,这就是我得到的。

桌面尺寸

简而言之,该命令ls -lS并不计算Desktop和其他子目录内容的大小。有什么办法可以做到吗?


编辑:

ls -lsh命令输出

total 10M
4.0K drwxrwxr-x  2 rahul rahul 4.0K Mar 10 12:24 bin
4.0K drwxrwxr-x  8 rahul rahul 4.0K May  8 14:51 boxfitv2
4.0K -rw-rw-r--  1 rahul rahul 3.2K May 13 13:28 c.c
 12K drwxr-xr-x  4 rahul rahul  12K Jun  6  2016 cfitsio
7.7M -rw-rw-r--  1 rahul rahul 7.7M May 15 15:35 Costa_ODE.pdf
4.0K drwxrwxrwx  2 rahul rahul 4.0K Jan 30 11:50 dao2
   0 -rw-rw-r--  1 rahul rahul    0 May 13 20:37 default.txt
4.0K drwxrwxr-x  2 rahul rahul 4.0K Mar 12  2016 deja-dup
4.0K drwxr-xr-x  6 rahul rahul 4.0K May 16 17:11 Desktop
4.0K drwxr-xr-x  3 rahul rahul 4.0K May 15 10:53 Documents
4.0K drwxr-xr-x  5 rahul rahul 4.0K May  8 14:09 Downloads
 12K -rw-r--r--  1 rahul rahul 8.8K Feb  7  2016 examples.desktop
.
.
.

du -sh ~/Desktop命令输出

80M /home/rahul/Desktop

答案1

ls -lS确实显示了目录的真实大小:目录本身+对给定目录中包含的任何文件的引用。

您可以使用du而不是ls

du -ha -d 1 | sort -hr

du:递归估计目录的文件空间使用情况

h:人类可读

a:所有内容,不仅仅是目录

d 1:最大深度 1,因此您只检查当前目录中的目录

sort -hr: 降序排序

答案2

ls显示的大小常规的文件(或者,在目录的情况下,其索引节点的大小,而不仅仅是其内容,因为它没有快速的方法来确定它,而对于常规文件,大小是已知的,因此可以准确且快速地显示)。

实际上,该字段根据文件代表的内容而有所不同:

  • 对于常规文件:它显示它们的实际大小
  • 对于符号链接(符号链接,ln -s source dest):符号链接名称的长度(因为这是符号链接文件的内容)。 (例如:符号链接/dev/fd -> /proc/self/fd:具有正好 13 个字符长的目标路径 ( / p r o c / s e l f / f d),因此ls -l将在第 5 列中显示“13”,而不是指向文件的大小。)
  • 对于目录:一个 inode 的大小(如果目录条目的内容适合一个)或多个 inode(如果需要多个 inode 来描述该目录条目的列表)。这就是为什么大多数文件都是 4096:通常它们内部没有很多文件,因此它可以全部放入 1 个 inode,默认情况下通常为 4096 字节。如果您曾经将许多文件放入某个目录中,则该文件将会上升(并且很可能会在之后保持上升状态,除非您重新创建目录本身)。
  • 对于管道和其他文件类型:每次通常与大小关联的字段可能是也可能不是大小(例如:对于块设备(例如:/dev/hd* 文件),它不显示任何大小,而是显示他们的major, minor配对信息请参阅man mknodman ls

要了解目录+子目录的内容总和:

  • du /some/path # 将显示每个目录:其内容的总和(包括子目录),并显示其及其下的每个目录/some/path

  • du -s /some/path# 将仅显示 1 级,即仅显示 /some/path 的总计

  • du -S /some/path# 显示每个目录的内容,不包括其子目录。有助于准确了解 /some/path 的哪些子目录较大。

https://linux.die.net/man/1/du更多细节。

相关内容