作者 | 刘光录
来源 | 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)。
以上就是本次分享全部内容,欢迎讨论。
往期推荐
Docker 那些事儿:如何安全地停止、删除容器?
掌握 Dowanward API 的妙用,轻松拿捏 kubernetes 环境变量
云原生时代,开发者应具备这5大能力
实战 Kubectl 创建 Deployment 部署应用
点分享
点收藏
点点赞
点在看