帮你精通Linux:简约却不简单的ls命令

时间:2021-05-02

ls 命令即 list directory contents是我们最为熟悉的Linux命令。它就如车载或者手机中的导航地图,彻底解放了我们的大脑,片刻不能离身。否则我们下楼取个快递,都得绕18道弯才能勉强找回家。

我们在前面的“Linux手册”课程中,大量应用ls这个地图查看器。

1.只列出当前的目录文件

我们先从一个具体的问题出发,如何单单打印出目录文件。

如果使用find命令,不仅简单,而且符合完全语义化的表达:

$find.-maxdepth1-typed|head

.

./Templates

./.ssh

./.tldr

./.zoom

./.presage

./Videos

./.racket

./.mplayer

./node_modules

我们甚至可以调用echo

$echo*/

anaconda3/backup.doom.d/CalibreLibrary/Desktop/Documents/Downloads/dwhelper/emacs.d.backup2/Mail/Music/News/node_modules/org/Pictures/Public/snap/Templates/Test/Videos/

查阅手册,我们会看到-d的选项:

-d,--directory

listdirectoriesthemselves,nottheircontents

直接运行试试:

$ls-d.

.#只返回了一个当前目录

改用通配符:

$ls-d*/

anaconda3/Downloads/News/snap/

backup.doom.d/dwhelper/node_modules/Templates/

'CalibreLibrary/'emacs.d.backup2/org/Test/

Desktop/Mail/Pictures/Videos/

Documents/Music/Public/

如果将d去掉呢?

实际的执行是将扩展的通配符的子目录全部都列了出来。

2.只列出当前的文件

那么如何单单列出来当前的文件呢?最简单的方法还是 find 命令的语义化查询:

$find.-maxdepth1-typef-iname"[^.]*"|nl

1./#*message*-20191127-125216#

2./package-lock.json

3./start.sh

4./backup.gnus.el

5./zero-config.el

6./RMAIL

7./linux-tutorial.org

8./linux-tutorial-2.org

9./*scratch*

我们知道ls命令有-F(filter)选项,将所有的文件归类:

$ls-F

anaconda3/News/

Anaconda3-2020.02-Linux-x86_64.shnode_modules/

backup.doom.d/org/

backup.gnus.elpackage-lock.json

'CalibreLibrary'/Pictures/

Desktop/Public/

Documents/RMAIL

Downloads/'*scratch*'

dwhelper/snap/

emacs.d.backup2/start.sh*

linux-tutorial-2.orgTemplates/

linux-tutorial.orgTest/

Mail/Videos/

'#*message*-20191127-125216#'zero-config.el

Music/

于是我们考虑使用组合命令:

$ls-F|grep.*[^/]$|nl

1backup.gnus.el

2linux-tutorial-2.org

3linux-tutorial.org

4#*message*-20191127-125216#

5package-lock.json

6RMAIL

7*scratch*

8start.sh*

9zero-config.el

或者:

$ls-l|grep^-|nl

1-rw-rw-r--1gaoweigaowei6042Feb421:23backup.gnus.el

2-rw-rw-r--2gaoweigaowei892May2608:34linux-tutorial-2.org

3-rw-rw-r--2gaoweigaowei892May2608:34linux-tutorial.org

4-rw-rw-r--1gaoweigaowei139Nov272019#*message*-20191127-125216#

5-rw-rw-r--1gaoweigaowei313Dec102019package-lock.json

6-rw-rw-r--1gaoweigaowei74109Mar1714:27RMAIL

7-rw-rw-r--1gaoweigaowei497Dec52019*scratch*

8-rwxr-xr-x1gaoweigaowei1793May706:20start.sh

9-rw-rw-r--1gaoweigaowei1058Mar3017:10zero-config.el

至此我们可以得出结论,ls并没有直接列出全部文件的方案。

3.列出指定类型文件

虽然没有列出全部文件的方法,然而我们却可以打印指定suffix的文件:

$ls*.org#org文件

linux-tutorial-2.orglinux-tutorial.org

$ls*.sh#shell文件

start.sh

而且可以讲二者组合:

$ls*.{org,sh}

linux-tutorial-2.orglinux-tutorial.orgstart.sh

4.无处不在的排序

排序无处不在,两个小学生考试也要排排名次。

我们首先想到的是sort命令。

$ls-lh|sort-k5-h|head

total320K

-rw-rw-r--1gaoweigaowei139Nov272019#*message*-20191127-125216#

-rw-rw-r--1gaoweigaowei313Dec102019package-lock.json

-rw-rw-r--1gaoweigaowei497Dec52019*scratch*

-rw-rw-r--2gaoweigaowei892May2608:34linux-tutorial-2.org

-rw-rw-r--2gaoweigaowei892May2608:34linux-tutorial.org

-rw-rw-r--1gaoweigaowei1.1KMar3017:10zero-config.el

-rwxr-xr-x1gaoweigaowei1.8KMay706:20start.sh

drwx------5gaoweigaowei4.0KFeb421:32Mail

drwxrwxr-x10gaoweigaowei4.0KMar1917:46emacs.d.backup2

颇为惊喜的是,ls 贴心的准备了 -S 选项,并且,更为贴心的是输出的结果是倒序排列。

$ls-lhS|head

total320K

drwxr-xr-x13gaoweigaowei100KJun2215:02Downloads

-rw-rw-r--1gaoweigaowei73KMar1714:27RMAIL

drwxr-xr-x8gaoweigaowei20KJun2320:01Videos

drwxr-xr-x3gaoweigaowei12KApr2804:50Desktop

drwxr-xr-x7gaoweigaowei12KJun2021:15Pictures

-rw-rw-r--1gaoweigaowei6.0KFeb421:23backup.gnus.el

drwxrwxr-x26gaoweigaowei4.0KJun1609:02anaconda3

drwxrwxr-x2gaoweigaowei4.0KJan2713:11backup.doom.d

drwxrwxr-x6gaoweigaowei4.0KFeb2116:17CalibreLibrary

-S 是长选项--sort的短写形式,除了按文件大小排序,也可以按照时间排序等

$ls-lh--sort=time|head#简写为ls-ht

total320K

drwxr-xr-x8gaoweigaowei20KJun2320:01Videos

drwxr-xr-x13gaoweigaowei100KJun2215:02Downloads

drwxr-xr-x7gaoweigaowei12KJun2021:15Pictures

drwxrwxr-x26gaoweigaowei4.0KJun1609:02anaconda3

drwxr-xr-x4gaoweigaowei4.0KJun1518:01snap

drwxr-xr-x15gaoweigaowei4.0KJun210:53Documents

drwxrwxr-x2gaoweigaowei4.0KMay2610:50Test

-rw-rw-r--2gaoweigaowei892May2608:34linux-tutorial-2.org

-rw-rw-r--2gaoweigaowei892May2608:34linux-tutorial.org

5.极简模式

有时候,我们阅读-l选项下的结果,眼花缭乱,头晕目眩。此时可以尝试极简模式:

$ls-sS

绝大部分时间,我们更关注的是文件的大小,-s, --size正提供这样的服务。

6.收尾总结

总结上述的方法:

#1.只列出目录

ls-d*/

#2.只列出文件

ls*.{txt,pdf,org}

#3.文件大小排序

ls-lhS

#4.时间戳排序

ls-lht

#5.极简模式

ls-Ss

以上本文收尾,盼对大家有点滴帮助。

原文地址:https://www.toutiao.com/i6908524368884695565/

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章