如何从选项列表中确定哪个 Linux 文件最大?

如何从选项列表中确定哪个 Linux 文件最大?
$ ls -l
drwsrwsrwt 2  caine caine 4096 2017-01-10 13:21 10050
-rw-r--r-- 10 caine caine 4096 2017-01-19 11:29 10051
drwxr-xr-x 20 caine    18 8096 2017-01-19 11:29 10052
drwxr-xr-x 21 11    caine 4096 2017-01-19 11:29 10053
drwxr-xr-x 22 caine    22 4096 2017-01-19 11:29 10054
-rw-r--r-- 14 caine caine   50 2017-01-19 11:29 10055

根据上述,我如何计算出哪个文件大小最大?有人告诉我答案是 10051,但我不明白为什么。仅根据上述信息,是否有一种特定方法可以用来计算出哪个文件最大?

答案1

ls -l输出 7 列:类型和权限、链接数量、所有者、组、大小、修改时间和名称。 (这在信息页面中为 GNU ls 进行了记录;请参阅info ls,然后从菜单中选择“列出了哪些信息”,然后向下滚动到-l。或者info ls 'long ls format'应该直接带您到那里)。

因此,您查看第一列(类型和权限),第一个字母告诉您类型:目录d-普通文件的类型。所以只有两个文件:10051 和 10055。然后你看第五列(大小),一个是 4096 字节,另一个是 50 字节——很明显哪个更大。

当然,所有这些目录可能包含相当多的文件,并且这些文件的总大小可能更大。ls显示目录本身的大小(如果你仔细想想,“目录中的内容”是数据,因此必须存储在某个地方,尽管在 Unix 上名字文件的数量也存储为目录的一部分),而不是其内容 - 其中一个目录本身 (10052) 更大。

如果您想知道目录的大小,包括它们包含的文件和子目录(递归地),du则可以使用该命令。

答案2

# /bin/ls -1sSr | tail -1

根据大小对列表进行排序,然后仅在列表末尾显示最大的。

答案3

既然您提到了 Linux,我假设您正在使用 GNU Coreutils 版本的ls.

info ls我们所知,ls -l将输出

“...文件类型、文件模式位、硬链接数量、所有者名称、组名称、大小和时间戳(*注意格式化文件时间戳::),通常是修改时间。

因此,通过查看第五列 - 这就是文件大小,当然我们可以解析ls -l withawk或任何其他工具的输出,但是 1)解析 ls 是个坏主意, 和 2)GNU ls 中将不存在代表设备的文件大小

因此,我会推荐替代方案:

$ find -maxdepth 1 -type f -exec du -b {}  \; | sort -k1,1 -n  | tail -n 1

这将过滤文件,du对每个文件运行,并对输出进行数字排序。最后一行是最大的文件。

答案4

您可以使用du命令:

du -a $PWD | sort -n -r

第一个输出是工作目录

相关内容