把 Linux 上的文件列表和排序玩出花来

系统 Linux
在 Linux 系统上,有许多方法可以列出文件并显示它们的信息。这篇文章回顾了一些提供文件细节的命令,并提供了自定义文件列表的选项,以满足你的需求。

在 Linux 系统上,有许多方法可以列出文件并显示它们的信息。这篇文章回顾了一些提供文件细节的命令,并提供了自定义文件列表的选项,以满足你的需求。

大多数命令都会列出单个目录中的文件,而其他命令则可以深入到文件系统的目录中,只要你愿意看。

当然,最主要的文件列表命令是 ls。然而,这个命令有大量的选项,可以只查找和列出你想看的文件。另外,还有 find 可以帮助你进行非常具体的文件搜索。

[[339835]]

按名称列出文件

最简单的方法是使用 ls 命令按名称列出文件。毕竟,按名称(字母数字顺序)列出文件是默认的。你可以选择 ls(无细节)或 ls -l(大量细节)来决定你看到什么。

  1. $ ls | head -6 
  2. 8pgs.pdf 
  3. Aesthetics_Thank_You.pdf 
  4. alien.pdf 
  5. Annual_Meeting_Agenda-20190602.pdf 
  6. bigfile.bz2 
  7. bin 
  8. $ ls -l | head -6 
  9. -rw-rw-r--  1 shs     shs      10886 Mar 22  2019 8pgs.pdf 
  10. -rw-rw-r--  1 shs     shs     284003 May 11  2019 Aesthetics_Thank_You.pdf 
  11. -rw-rw-r--  1 shs     shs      38282 Jan 24  2019 alien.pdf 
  12. -rw-rw-r--  1 shs     shs      97358 May 19  2019 Annual_Meeting_20190602.pdf 
  13. -rw-rw-r--  1 shs     shs   18115234 Apr 16 17:36 bigfile.bz2 
  14. drwxrwxr-x  4 shs     shs    8052736 Jul 10 13:17 bin 

如果你想一次查看一屏的列表,可以将 ls 的输出用管道送到 more 命令中。

按相反的名字顺序排列文件

要按名称反转文件列表,请添加 -r( 反转(Reverse))选项。这就像把正常的列表倒过来一样。

  1. $ ls -r 
  2. $ ls -lr 

按文件扩展名列出文件

ls 命令不会按内容分析文件类型,它只会处理文件名。不过,有一个命令选项可以按扩展名列出文件。如果你添加了 -X ( 扩展名(eXtension))选项,ls 将在每个扩展名类别中按名称对文件进行排序。例如,它将首先列出没有扩展名的文件(按字母数字顺序),然后是扩展名为 .1、.bz2、.c 等的文件。

只列出目录

默认情况下,ls 命令将同时显示文件和目录。如果你想只列出目录,你可以使用 -d( 目录(Directory))选项。你会得到一个像这样的列表:

  1. $ ls -d */ 
  2. 1/     backups/     modules/       projects/     templates/ 
  3. 2/     html/        patches/       public/       videos/ 
  4. bin/   new/         private/       save/ 

按大小排列文件

如果你想按大小顺序列出文件,请添加 -S( 大小(Size))选项。但请注意,这实际上不会显示文件的大小(以及其他文件的细节),除非你还添加 -l( 长列表(Long listing))选项。当按大小列出文件时,一般来说,看到命令在按你的要求做事情是很有帮助的。注意,默认情况下是先显示最大的文件。添加 -r 选项可以反过来(即 ls -lSr)。

  1. $ ls -lS 
  2. total 959492 
  3. -rw-rw-r--  1 shs   shs  357679381 Sep 19  2019 sav-linux-free-9.tgz 
  4. -rw-rw-r--  1 shs   shs  103270400 Apr 16 17:38 bigfile 
  5. -rw-rw-r--  1 shs   shs   79117862 Oct  5  2019 Nessus-8.7.1-ubuntu1110_amd64.deb 

按属主列出文件

如果你想按属主列出文件(例如,在一个共享目录中),你可以把 ls 命令的输出传给 sort,并通过添加 -k3 来按第三个字段排序,从而挑出属主一栏。

  1. $ ls -l | sort -k3 | more 
  2. total 56 
  3. -rw-rw-r-- 1 dory  shs      0 Aug 23 12:27 tasklist 
  4. drwx------ 2 gdm   gdm   4096 Aug 21 17:12 tracker-extract-files.121 
  5. srwxr-xr-x 1 root  root     0 Aug 21 17:12 ntf_listenerc0c6b8b4567 
  6. drwxr-xr-x 2 root  root  4096 Aug 21 17:12 hsperfdata_root 
  7.               ^ 
  8.               | 

事实上,你可以用这种方式对任何字段进行排序(例如,年份)。只是要注意,如果你要对一个数字字段进行排序,则要加上一个 n,如 -k5n,否则你将按字母数字顺序进行排序。这种排序技术对于文件内容的排序也很有用,而不仅仅是用于列出文件。

按年份排列文件

使用 -t( 修改时间(Time modified))选项按年份顺序列出文件 —— 它们的新旧程度。添加 -r 选项,让最近更新的文件在列表中最后显示。我使用这个别名来显示我最近更新的文件列表。

  1. $ alias recent='ls -ltr | tail -8' 

请注意,文件的更改时间和修改时间是不同的。-c( 更改时间(time Changed))和 -t(修改时间)选项的结果并不总是相同。如果你改变了一个文件的权限,而没有改变其他内容,-c 会把这个文件放在 ls 输出的顶部,而 -t 则不会。如果你想知道其中的区别,可以看看 stat 命令的输出。

  1. $ stat ckacct 
  2.   File: ckacct 
  3.   Size: 200             Blocks: 8          IO Block: 4096   regular file 
  4. Device: 801h/2049d      Inode: 829041      Links: 1 
  5. Access: (0750/-rwxr-x---)  Uid: ( 1000/     shs)   Gid: ( 1000/     shs) 
  6. Access: 2020-08-20 16:10:11.063015008 -0400 
  7. Modify: 2020-08-17 07:26:34.579922297 -0400 <== content changes 
  8. Change: 2020-08-24 09:36:51.699775940 -0400 <== content or permissions changes 
  9.  Birth: - 

按组别列出文件

要按关联的组别对文件进行排序,你可以将一个长列表的输出传给 sort 命令,并告诉它在第 4 列进行排序。

  1. $ ls -l | sort -k4 

按访问日期列出文件

要按访问日期(最近访问的日期在前)列出文件,使用 -ltu 选项。u 强制“按访问日期”排列顺序。

  1. $ ls -ltu 
  2. total 959500 
  3. -rwxr-x---  1 shs     shs        200 Aug 24 09:42 ckacct  <== most recently used 
  4. -rw-rw-r--  1 shs     shs       1335 Aug 23 17:45 lte 

单行列出多个文件

有时,精简的文件列表更适合手头的任务。ls 命令甚至有这方面的选项。为了在尽可能少的行上列出文件,你可以使用 --format=comma 来用逗号分隔文件名,就像这个命令一样:

  1. $ ls --format=comma 
  2. 1, 10, 11, 12, 124, 13, 14, 15, 16pgs-landscape.pdf, 16pgs.pdf, 17, 18, 19, 
  3. 192.168.0.4, 2, 20, 2018-12-23_OoS_2.pdf, 2018-12-23_OoS.pdf, 20190512_OoS.pdf, 
  4. '2019_HOHO_application working.pdf' … 

喜欢用空格?使用 --format=across 代替。

  1. $ ls --format=across z* 
  2. z              zip            zipfiles      zipfiles1.bat   zipfiles2.bat 
  3. zipfiles3.bat  zipfiles4.bat  zipfiles.bat  zoom_amd64.deb  zoomap.pdf 
  4. zoom-mtg 

增加搜索的深度

虽然 ls 一般只列出单个目录中的文件,但你可以选择使用 -R 选项( 递归(Recursively))地列出文件,深入到整个目录的深处。

  1. $ ls -R zzzzz | grep -v "^$" 
  2. zzzzz: 
  3. zzzz 
  4. zzzzz/zzzz: 
  5. zzz 
  6. zzzzz/zzzz/zzz: 
  7. zz 
  8. zzzzz/zzzz/zzz/zz: 
  9. zzzzz/zzzz/zzz/zz/z: 
  10. sleeping 

另外,你也可以使用 find 命令,对深度进行限制或不限制。在这个命令中,我们指示 find 命令只在三个层次的目录中查找:

  1. $ find zzzzz -maxdepth 3 
  2. zzzzz 
  3. zzzzz/zzzz 
  4. zzzzz/zzzz/zzz 
  5. zzzzz/zzzz/zzz/zz 

选择 ls 还是 find

当你需要列出符合具体要求的文件时,find 命令可能是比 ls 更好的工具。

与 ls 不同的是,find 命令会尽可能地深入查找,除非你限制它。它还有许多其他选项和一个 -exec 子命令,允许在找到你要找的文件后采取一些特定的行动。

总结

ls 命令有很多用于列出文件的选项。了解一下它们。你可能会发现一些你会喜欢的选项。

 

责任编辑:赵宁宁 来源: Linux中国
相关推荐

2021-08-04 12:26:00

Postman工具频率

2021-12-14 10:54:31

TopK面试排序法

2023-02-15 09:00:49

2020-08-23 09:16:46

Linux文件合并和排序

2020-08-24 17:26:09

Linux合并文件排序文件

2020-03-26 14:35:42

编程语言PythonJava

2020-05-28 10:23:57

5G网络技术

2021-12-13 08:52:42

Go 泛型

2022-10-09 10:11:02

AI神经网络

2020-11-22 07:20:15

LinuxEtcherUSB

2021-03-19 09:30:22

Linuxkill命令 管理进程

2024-02-22 15:31:46

Python排序

2018-06-25 13:10:16

Linux复制重命名

2022-10-15 07:49:18

代码虚拟线程

2013-06-07 10:07:29

2022-02-15 14:08:32

虚拟机Wasm浏览器

2017-08-02 13:46:37

LinuxSteven Blac主机文件

2019-10-15 13:29:24

LinuxLinux命令

2020-06-15 08:12:07

Linux系统数据

2019-04-29 11:14:25

MySQL存储排序
点赞
收藏

51CTO技术栈公众号