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

RD0*_*017 9 ls directory

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
.
.
.
.
Run Code Online (Sandbox Code Playgroud)

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

桌面大小

简而言之,该命令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
.
.
.
Run Code Online (Sandbox Code Playgroud)

du -sh ~/Desktop命令的输出

80M /home/rahul/Desktop
Run Code Online (Sandbox Code Playgroud)

M. *_*rra 12

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

您可以使用du代替ls

du -h --max-depth=1 | sort -hr
Run Code Online (Sandbox Code Playgroud)

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

h: 人类可读

--max-depth=1: 所以你只检查当前目录中的目录

sort -hr: 递减排序


Oli*_*lac 6

ls显示常规文件的大小(或者,如果是目录,则显示其 inode 的大小,而不仅仅是它们的内容,因为它无法快速确定,而对于常规文件,大小是已知的,因此可以准确显示并且很快)。

实际上,该字段因文件所代表的内容而异:

  • 对于常规文件:它显示它们的实际大小
  • 对于符号链接(符号链接,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 mknod。参见man 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