$ 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
第一个输出是工作目录