Linux下 ls 命令的高级用法8例

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/yychuyu/article/details/84898983

在Linux下,ls这个命令大家肯定太熟悉了,良许相信只要是Linux工程师,每天都会离不开这个命令,而且一天会使用个几百次。但是,除了 ls -l 以外,你还知 ls 的哪些高级用法呢?良许今天为大家介绍 ls 命令的8种高级用法。

假如我们有这样的一个文件夹,我们用tree命令查看它的目录结构:

img

img

用法1:列出/home/alvin/test_dir目录下所有文件及目录的详细资料

命令:

ls -lR /home/alvin/test_dir/

 
 

结果:


 
 
  1. [alvin@VM_0_16_centos test_dir]$ ls -lR /home/alvin/test_dir/
  2. /home/alvin/test_dir/:
  3. total 28
  4. -rw-rw-r -- 1 alvin alvin   37 Nov 18 09:12 atb_aux.c
  5. -rw-rw-r -- 1 alvin alvin    8 Nov 18 09:12 atb_can.c
  6. -rw-rw-r -- 1 alvin alvin   24 Nov 18 09:12 atb_orch.c
  7. -rw-rw-r -- 1 alvin alvin    5 Nov 18 09:12 atb_ota.c
  8. drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 include
  9. -rw-rw-r -- 1 alvin alvin    0 Nov 18 09:12 Makefile
  10. drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 output
  11. drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 src
  12. /home/alvin/test_dir/include:
  13. total 0
  14. -rw-rw-r -- 1 alvin alvin 0 Nov 18 09:12 a.h
  15. -rw-rw-r -- 1 alvin alvin 0 Nov 18 09:12 b.h
  16. -rw-rw-r -- 1 alvin alvin 0 Nov 18 09:12 c.h
  17. /home/alvin/test_dir/output:
  18. total 0
  19. -rwxrwxr-x 1 alvin alvin 0 Nov 18 09:12 app
  20. /home/alvin/test_dir/src:
  21. total 0
  22. -rw-rw-r -- 1 alvin alvin 0 Nov 18 09:12 a.c
  23. -rw-rw-r -- 1 alvin alvin 0 Nov 18 09:12 b.c
  24. -rw-rw-r -- 1 alvin alvin 0 Nov 18 09:12 c.c

在这里,-l 选项大家应该比较熟悉,是以列表的形式显示结果的意思。而对于 -R 选项,意思是递归处理,将指定目录下的所有文件及子目录一并处理。

用法2:列出/home/alvin/test_dir目录下以atb开头的所有文件的详细内容

命令:

ls -l atb*

 
 

结果:


 
 
  1. [alvin@ VM_0_16_centos test_dir]$ ls -l atb*
  2. -rw-rw-r--  1 alvin alvin  37  Nov  18  09: 12 atb_aux. c
  3. -rw-rw-r--  1 alvin alvin   8  Nov  18  09: 12 atb_can. c
  4. -rw-rw-r--  1 alvin alvin  24  Nov  18  09: 12 atb_orch. c
  5. -rw-rw-r--  1 alvin alvin   5  Nov  18  09: 12 atb_ota. c

用法3:只列出目录下的子目录

  • 方法1

命令


 
 
  1. ls -F /home/alvin/test_dir |  grep  /$

结果:


 
 
  1. [alvin@VM_0_16_centos test_dir]$ ls -F /home/alvin/test_dir  | grep /$
  2. include/
  3. output/
  4. src/

其中:-F选项表示在每个文件名后附上一个字符以说明改文件的类型。“*”:表示可执行的普通文件;“/”:表示目录;“@”:表示符号链接;“|”:表示FIFOs;“=”:表示套接字。

/$ 其实是一个正则表达式,表示以 / 结尾。grep /$ 表示过滤出以 / 结尾的结果,也就是子目录。

  • 方法2

命令:


 
 
  1. ls -p /home/alvin/test_dir |  grep  /$

结果:


 
 
  1. [alvin@VM_0_16_centos test_dir]$ ls -p  | grep /$
  2. include/
  3. output/
  4. src/

其中:-p 选项与 -F 选项类似,也是在每个文件名后附上一个字符以说明改文件的类型。

  • 方法3

命令:

ls -l /home/alvin/test_dir | grep "^d"

 
 

结果:


 
 
  1. [alvin@VM_0_16_centos test_dir]$ ls -l /home/alvin/test_dir | grep  "^d"
  2. drwxrwxr-x  2 alvin alvin  4096 Nov  18  09: 12  include
  3. drwxrwxr-x  2 alvin alvin  4096 Nov  18  09: 12 output
  4. drwxrwxr-x  2 alvin alvin  4096 Nov  18  09: 12 src

其中:^d 也是一个正则表达式,表示以 d 开头。grep "^d" 表示过滤出以 d 开头的结果,而 ls -l 所列出来的结果,首位如果是 d 的话,表示这个文件是个目录,这样就可以过滤出子目录了。

  • 方法4

命令:

ls -d */

 
 

结果:


 
 
  1. [alvin@VM_0_16_centos test_dir]$ ls -d */
  2. include/  output/  src/

其中:-d 选项表示将目录象文件一样显示,而不显示其下的文件。

用法4:按时间顺序列出目录下的文件,越新越排后面。

命令:

ls -ltr

 
 

结果:


 
 
  1. [alvin@VM_0_16_centos test_dir]$ ls -lrt
  2. total 28
  3. drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 src
  4. drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 output
  5. -rw-rw-r-- 1 alvin alvin    0 Nov 18 09:12 Makefile
  6. drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 include
  7. -rw-rw-r-- 1 alvin alvin    5 Nov 18 09:12 atb_ota.c
  8. -rw-rw-r-- 1 alvin alvin   24 Nov 18 09:12 atb_orch.c
  9. -rw-rw-r-- 1 alvin alvin    8 Nov 18 09:12 atb_can.c
  10. -rw-rw-r-- 1 alvin alvin   37 Nov 18 09:12 atb_aux.c

其中:-t 选项表示以文件修改时间排序,越新的越靠前。-r 选项表示对结果进行反向排序,二者结合的话表示以修改时间排序,越新的越靠后。

用法5:以文件大小进行排序

命令:

ls -lhS

 
 

结果:


 
 
  1. [alvin@VM_0_16_centos test_dir]$ ls -lhS
  2. total 28K
  3. drwxrwxr-x 2 alvin alvin 4.0K Nov 18 09:12 include
  4. drwxrwxr-x 2 alvin alvin 4.0K Nov 18 09:12 output
  5. drwxrwxr-x 2 alvin alvin 4.0K Nov 18 09:12 src
  6. -rw-rw-r-- 1 alvin alvin   37 Nov 18 09:12 atb_aux.c
  7. -rw-rw-r-- 1 alvin alvin   24 Nov 18 09:12 atb_orch.c
  8. -rw-rw-r-- 1 alvin alvin    8 Nov 18 09:12 atb_can.c
  9. -rw-rw-r-- 1 alvin alvin    5 Nov 18 09:12 atb_ota.c
  10. -rw-rw-r-- 1 alvin alvin    0 Nov 18 09:12 Makefile

其中:-h 选项表示以可读选项显示,否则文件大小是默认以字节数显示,比如:4873字节,你知道是多少吗?加了 -h 选项系统就帮你换算成以k或者其它单位的结果。

-S 选项表示以文件大小进行排序,文件越大越靠前。想要文件小者靠前的话,加个 -r 选项就行。

用法6:统计当前目录下的文件数和目录数

  • 统计文件数

命令:

ls -l | grep "^-" | wc -l

 
 

结果:


 
 
  1. [alvin@VM_0_16_centos test_dir]$ ls -l |  grep  "^-" | wc -l
  2. 5

其中:^- 表示以 - 开头,即普通文件,ls -l | grep "^-" 过滤出普通文件,再用 wc -l统计过滤出的普通文件的个数。

  • 统计目录数

命令:

ls -l | grep "^d" | wc -l

 
 

结果:


 
 
  1. [alvin@VM_0_16_centos test_dir]$ ls -l |  grep  "^d" | wc -l
  2. 3

其中:^d 表示以 d 开头,即目录,ls -l | grep "^d" 过滤出目录,再用 wc -l 统计过滤出的目录的个数。

用法7:列出所有文件的绝对路径

命令:

ls | sed "s:^:`pwd`/:"

 
 

结果:


 
 
  1. [alvin@ VM_0_16_centos test_dir]$ ls | sed  "s:^:`pwd`/:"
  2. /home/alvin/test_dir/atb_aux. c
  3. /home/alvin/test_dir/atb_can. c
  4. /home/alvin/test_dir/atb_orch. c
  5. /home/alvin/test_dir/atb_ota. c
  6. /home/alvin/test_dir/include
  7. /home/alvin/test_dir/ Makefile
  8. /home/alvin/test_dir/output
  9. /home/alvin/test_dir/src

其中:sed "s:^:``pwd``/:" 表示在行首增加 pwd(即文件所在路径),与文件名组合成绝对路径。

用法8:列出当前目录下的所有文件(包括隐藏文件)的绝对路径, 对目录不做递归

在上一个用法里,对于隐藏文件(即以 . 开头的文件)是不作处理的,如果我们需要对隐藏文件也作处理的话,就需要使用下面这个命令:

find $PWD -maxdepth 1 | xargs ls -ld

 
 

结果:


 
 
  1. [alvin@ VM_0_16_centos test_dir]$  find $ PWD -maxdepth  1 | xargs ls -ld
  2. drwxrwxr-x  5 alvin alvin  4096  Nov  18  17: 30 /home/alvin/test_dir
  3. -rw-rw-r--  1 alvin alvin    37  Nov  18  09: 12 /home/alvin/test_dir/atb_aux. c
  4. -rw-rw-r--  1 alvin alvin     8  Nov  18  09: 12 /home/alvin/test_dir/atb_can. c
  5. -rw-rw-r--  1 alvin alvin    24  Nov  18  09: 12 /home/alvin/test_dir/atb_orch. c
  6. -rw-rw-r--  1 alvin alvin     5  Nov  18  09: 12 /home/alvin/test_dir/atb_ota. c
  7. drwxrwxr-x  2 alvin alvin  4096  Nov  18  09: 12 /home/alvin/test_dir/include
  8. -rw-rw-r--  1 alvin alvin     0  Nov  18  09: 12 /home/alvin/test_dir/ Makefile
  9. drwxrwxr-x  2 alvin alvin  4096  Nov  18  09: 12 /home/alvin/test_dir/output
  10. drwxrwxr-x  2 alvin alvin  4096  Nov  18  09: 12 /home/alvin/test_dir/src

其中:find $PWD -maxdepth 1 限定了在当前层级(即不递归),再对find结果传递给 ls -ld 作参数,这样就将当前目录下的所有文件补齐了所在路径。

---------------

我是良许,世界500强外企 Linux 开发工程师,专业生产 Linux 干货。欢迎关注我的公众号「良许Linux」,回复「1024」获取最新最全的技术资料,回复「入群」进入高手如云技术交流群。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值