6408885719a8fc71dc6e42014d43f324.gif

作者 | 刘光录

来源 | TIAP

ls 命令用于显示目录的内容。使用 -l 选项,可以列出文件和目录及其属性。

今天我们来分享一下如何根据文件大小对列表进行排序。

ls -l 命令可以显示文件大小,但也仅仅是能让我们看到文件的大小,它默认是按照字母顺序显示的,不能按照文件大小进行排序。

如果我们想要查找当前目录下最大的文件,或者最小的文件,那就需要对文件大小进行排序了。

那如何按文件大小进行排序呢?ls 命令的 -S 选项可以做到这一点(注意 S 是大写的)。然后将其与 -h 和 -l 选项一起使用,会让输出看起来更舒服:

ls -lhS

为什么这么说呢,下面我们通过例子来看一下。

根据大小对文件进行排序

Linux 中有一个 sort 命令,但是它是对文件中的内容进行排序,并不是针对文件本身。

为了对比,我们按默认的排序,列出当前目录下的文件:

[gliu@fedora ~]$ ls -ltotal 404-rw-rw-r-- 1 gliu gliu  41145 May 27 15:24 ads.txt-rw-rw-r-- 1 gliu gliu  45443 May 24 09:03 apt-get.pdf-rw-rw-r-- 1 gliu gliu  29983 May 27 16:07 bash.pdf-rw-rw-r-- 1 gliu gliu 249773 May 26 14:56 cronjob-cheatsheet.png-rw-rw-r-- 1 gliu gliu   4943 Jun  2 20:09 gnome-console-voiceoverdrwxrwxr-x 4 gliu gliu   4096 Jun  2 22:09 letters-rw-rw-r-- 1 gliu gliu  12721 May 29 12:29 members.2022-05-29.csv-rw-rw-r-- 1 gliu gliu    143 May 30 12:06 routes.yamldrwxrwxr-x 2 gliu gliu   4096 Jun  2 22:09 words

然后使用 -S 选项来将文件按大小进行排序(注意 S 是大写):

[gliu@fedora ~]$ ls -lStotal 404-rw-rw-r-- 1 gliu gliu 249773 May 26 14:56 cronjob-cheatsheet.png-rw-rw-r-- 1 gliu gliu  45443 May 24 09:03 apt-get.pdf-rw-rw-r-- 1 gliu gliu  41145 May 27 15:24 ads.txt-rw-rw-r-- 1 gliu gliu  29983 May 27 16:07 bash.pdf-rw-rw-r-- 1 gliu gliu  12721 May 29 12:29 members.2022-05-29.csv-rw-rw-r-- 1 gliu gliu   4943 Jun  2 20:09 gnome-console-voiceoverdrwxrwxr-x 4 gliu gliu   4096 Jun  2 22:09 lettersdrwxrwxr-x 2 gliu gliu   4096 Jun  2 22:09 words-rw-rw-r-- 1 gliu gliu    143 May 30 12:06 routes.yaml

这样,文件就是按照大小进行的排序。但是大家可以看到,列表中输出的文件大小,单位是B,所以我们还可以使用 -h 选项,让文件大小以 KB, Mb, 或者 GB 为单位,这样更易读:

[gliu@fedora ~]$ ls -lhStotal 404K-rw-rw-r-- 1 gliu gliu 244K May 26 14:56 cronjob-cheatsheet.png-rw-rw-r-- 1 gliu gliu  45K May 24 09:03 apt-get.pdf-rw-rw-r-- 1 gliu gliu  41K May 27 15:24 ads.txt-rw-rw-r-- 1 gliu gliu  30K May 27 16:07 bash.pdf-rw-rw-r-- 1 gliu gliu  13K May 29 12:29 members.2022-05-29.csv-rw-rw-r-- 1 gliu gliu 4.9K Jun  2 20:09 gnome-console-voiceoverdrwxrwxr-x 4 gliu gliu 4.0K Jun  2 22:09 lettersdrwxrwxr-x 2 gliu gliu 4.0K Jun  2 22:09 words-rw-rw-r-- 1 gliu gliu  143 May 30 12:06 routes.yaml

注:如果两个文件大小相同,那么它们就会按照字母顺序排序。

按文件大小倒叙排序

默认情况下,按文件大小排序是正向排序,也就是文件越大的会排列在顶部。我们可以选择倒序排列,结合使用 -r 选项:

ls -lhSr

当目录中的文件数量比较多的时候(比如日志文件,可能有数十甚至上百个),倒序排列会很有用,这样你就可以在当前屏幕中看到最大的文件,而不需要向前滚动:

[gliu@itsfoss:~/toto$ ls -lhSrtotal 404K-rw-rw-r-- 1 gliu gliu  143 May 30 12:06 routes.yamldrwxrwxr-x 2 gliu gliu 4.0K Jun  2 22:09 wordsdrwxrwxr-x 4 gliu gliu 4.0K Jun  2 22:09 letters-rw-rw-r-- 1 gliu gliu 4.9K Jun  2 20:09 gnome-console-voiceover-rw-rw-r-- 1 gliu gliu  13K May 29 12:29 members.2022-05-29.csv-rw-rw-r-- 1 gliu gliu  30K May 27 16:07 bash.pdf-rw-rw-r-- 1 gliu gliu  41K May 27 15:24 ads.txt-rw-rw-r-- 1 gliu gliu  45K May 24 09:03 apt-get.pdf-rw-rw-r-- 1 gliu gliu 244K May 26 14:56 cronjob-cheatsheet.png

注:上述命令仅适用于文件,而不适用于目录。因为使用 ls 命令,目录的大小始终为 4kb(块大小)。目录的实际大小是通过 du (disk usage)  命令来查询的。

获取目录中最大的前10个文件

Linux 命令行最棒的地方在于,你可以组合多个命令从而获得不同的结果。

比如我们要查询当前目录中一些最大的文件。那么可以按大小对文件进行排序,然后在利用管道(|)结合使用 head 命令:

ls -lhS | head -11

在这个例子中,我在head 后使用的参数是 11, 因为第一行显示的是一个总数:

[gliu@itsfoss:~/tutu$ ls -lhS | head -11total 216K-rwxr-xr-x 1 gliu gliu  74K Jun  2 22:09 cpufetch-rw-rw-r-- 1 gliu gliu  45K Jun  2 22:38 apt-get.pdf-rw-rw-r-- 1 gliu gliu  41K Jun  2 22:38 ads.txt-rwxr-xr-x 1 gliu gliu 4.9K Jun  2 22:09 README.md-rw-rw-r-- 1 gliu gliu 4.9K Jun  2 22:38 gnome-console-voiceoverdrwxr-xr-x 2 gliu gliu 4.0K Jun  2 22:09 docdrwxr-xr-x 2 gliu gliu 4.0K Jun  2 22:09 picturesdrwxr-xr-x 5 gliu gliu 4.0K Jun  2 22:09 src-rwxr-xr-x 1 gliu gliu 2.8K Jun  2 22:09 CONTRIBUTING.md-rwxr-xr-x 1 gliu gliu 2.4K Jun  2 22:09 cpufetch.1

此外,你可以使用 tail 命令用于反向排序,但我觉着没必要。

以上命令是展示的当前目录中的文件列表。如果要在整个计算机中查询,那么可以加上根路径 /,不过这需要root权限。但是 ls 命令不适用于此类情况,如果要查询整个计算机中的文件,可以使用 find 命令查找大于指定大小的文件。

连同隐藏文件一起查询排序

如果你在文件或目录前面加一个点 . ,那么这个文件就变成了隐藏文件,使用 ls 命令(不带任何参数)是查看不到这些隐藏文件的。

许多配置文件一般是隐藏的,所以在按大小排序文件时,还应考虑这些隐藏文件。

选项 -a 可以显示隐藏文件,包括 . 和 .. 目录:

[gliu@fedora ~]$ ls -lahStotal 428K-rw-rw-r--  1 gliu gliu 244K May 26 14:56 cronjob-cheatsheet.png-rw-rw-r--  1 gliu gliu  45K May 24 09:03 apt-get.pdf-rw-rw-r--  1 gliu gliu  41K May 27 15:24 ads.txt-rw-rw-r--  1 gliu gliu  30K May 27 16:07 bash.pdf-rw-rw-r--  1 gliu gliu  13K Jun  3 09:41 .member.csv-rw-rw-r--  1 gliu gliu  13K May 29 12:29 members.2022-05-29.csv-rw-rw-r--  1 gliu gliu 4.9K Jun  2 20:09 gnome-console-voiceoverdrwxrwxr-x  4 gliu gliu 4.0K Jun  3 09:41 .drwxr-x--- 26 gliu gliu 4.0K Jun  3 10:19 ..drwxrwxr-x  3 gliu gliu 4.0K Jun  3 10:10 lettersdrwxrwxr-x  2 gliu gliu 4.0K Jun  2 22:09 words-rw-rw-r--  1 gliu gliu  143 May 30 12:06 routes.yaml

可以看到隐藏文件 .member.csv 也被输出在了列表中。

按大小递归排序文件

上述例子只是处理的当前目录中的文件。那么怎样才能包括子目录中的文件呢?如果我们要查找当前路径下最大的文件,还需要将子目录中的文件一块查找。

可以使用 -R 选项列出子目录中的文件。

ls -lRS

然而,这不是正确的方法,因为它不会将所有文件排序在一起,而是将它们排序在各自的目录中。

有一种方法,是可以使用du命令并将其组合起来,根据文件大小递归排序:

du -ah | sort -hr

许多Linux用户错误地使用-s(小写s)选项按大小排序文件,这是错误的。小写 s 显示每个条目的块大小。要排序,请使用-S(大写S)。

以上就是本次分享全部内容,欢迎讨论。

42ecbf18f71e12fc5a43e54d17b5b3ed.gif

往期推荐

Docker 那些事儿:如何安全地停止、删除容器?

掌握 Dowanward API 的妙用,轻松拿捏 kubernetes 环境变量

云原生时代,开发者应具备这5大能力

实战 Kubectl 创建 Deployment 部署应用

1acb32b3f347a3a6ead7ee5c6d46b65e.gif

点分享

b99ea39ab4f131056feda6ccb48082cf.gif

点收藏

e73db88a791d2b23c5fa27c7ee50e1e7.gif

点点赞

d1c36f2f92c5aa168b87f46d36e85f7c.gif

点在看

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐