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

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

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

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

命令:

  1. 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开头的所有文件的详细内容

命令:

  1. 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

命令:

  1. 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

命令:

  1. ls -d */

结果:

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

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

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

命令:

  1. 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:以文件大小进行排序

命令:

  1. 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:统计当前目录下的文件数和目录数

  • 统计文件数

命令:

  1. 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统计过滤出的普通文件的个数。

  • 统计目录数

命令:

  1. 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:列出所有文件的绝对路径

命令:

  1. 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:列出当前目录下的所有文件(包括隐藏文件)的绝对路径, 对目录不做递归

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

  1. 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 作参数,这样就将当前目录下的所有文件补齐了所在路径。

更多精彩内容,请关注公众号良许Linux,公众内回复1024可免费获得5T技术资料,包括:Linux,C/C++,Python,树莓派,嵌入式,Java,人工智能,等等。公众号内回复进群,邀请您进高手如云技术交流群。


公众号:良许Linux

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

Linux下 ls 命令的高级用法8例的更多相关文章

  1. Linux下ls命令显示符号链接权限为777的探索

    Linux下ls命令显示符号链接权限为777的探索 --深入ls.链接.文件系统与权限 一.摘要 ls是Linux和Unix下最常使用的命令之一,主要用来列举目录下的文件信息,-l参数允许查看当前目录 ...

  2. Linux下ls命令使用详解(转)

    说明:我们在linux下使用ll时,其实就是ls -l.ls才是最终的命令程序. ls命令是linux下最常用的命令之一,ls跟dos下的dir命令是一样的都是用来列出目录下的文件,List即列表的意 ...

  3. Linux下find命令参数及用法详解

    由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下.即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限.在运行一个非常 ...

  4. linux sort排序命令的高级用法(按多个列值进行排列)

    http://www.jquerycn.cn/a_9076 在linux中,使用sort按行进行排序是很简单的.不过有时,生活总是爱抛给你一个一个的问题.如果使用sort按多个列值排列,同时使用tab ...

  5. linux sort排序命令的高级用法

    在linux中,使用sort按行进行排序是很简单的.不过有时,生活总是爱抛给你一个一个的问题.如果使用sort按多个列值排列,同时使用tab作为分隔符,而且对于某些列需要进行逆序排列,这样sort命令 ...

  6. Linux下rar命令详解

    Linux下rar命令详解 用法: rar <命令> -<选项1> ….-<选项N> < 操作文档> <文件…> <@文件列表…> ...

  7. Linux下find命令用法详解

    Linux下find命令用法详解   学神VIP烟火 学神IT教育:XueGod-IT   最负责任的线上直播教育平台   本文作者为VIP学员 烟火   第一部分:根据文件名查找   1.在当前目录 ...

  8. Linux 下 Shell 命令的分类及用法

    当你打算真正操纵好你的 Linux 系统,没有什么能比命令行界面更让你做到这一点.为了成为一个 Linux 高手,你必须能够理解 Shell命令的不同类型,并且会在终端下正确的使用它们. 在 Linu ...

  9. Linux下dmesg命令处理故障和收集系统信息的7种用法

    目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...

随机推荐

  1. leetcode刷题记录——字符串

    242.有效地字母异位词 由于本题的字符串只包含 26 个小写字符,因此可以使用长度为 26 的整型数组对字符串出现的字符进行统计,并对比字母出现的次数是否一致.不再使用 HashMap. toCha ...

  2. 数据结构与算法笔记(java)目录

    数据结构: 一个动态可视化数据结构的网站 线性结构 数组 动态数组 链表 单向链表 双向链表 单向循环链表 双向循环链表 栈 栈 队列 队列 双端队列 哈希表 树形结构 二叉树 二叉树 二叉搜索树 A ...

  3. goland2019.2破解方法

    第一步:下载 jetbrains-agent.jar 链接:https://pan.baidu.com/s/1V2qZokAeAGcbsKDaoD9eSw 提取码:nrce 第二步:将下载的jetbr ...

  4. Java面试通关要点汇总整理

    简历篇 请自我介绍 请介绍项目 基础篇 基本功 面向对象的特征 final, finally, finalize 的区别 int 和 Integer 有什么区别 重载和重写的区别 抽象类和接口有什么区 ...

  5. 基于go+etcd实现分布式锁

    原文链接:https://www.yii-china.com/topic/detail/113 package main import ( "context" "fmt& ...

  6. 仿京东BOE官网 JavaScript代码

    let items = document.getElementsByClassName('item'); let points = document.getElementsByClassName('p ...

  7. N皇后问题的二进制优化详细思路

    题目啊常规解法(DFS)在此就不赘述了... 直接进入正题. 众所周知,N皇后是NP完全类问题,n稍微大了点求解过程就会变得很长. 算法方面很难再有质的效率突破,但这不妨在其他细节上下下功夫. 揆诸常 ...

  8. windows server 2008 r2 环境下,实现域名和IP同时都能访问一个网站

    有时候,用域名访问能得到一个页面,用IP地址访问也可以得到一个页面,比如 www.baidu.com 和 61.135.169.125 都可以打开百度页面.一开始要实现这种功能,还真有点不知所措,想了 ...

  9. JVM-Java创建对象过程

    关键字:类加载过程.内存分配 指针碰撞法.空间列表法.CAS.TLAB.初始化.对象头 Java对象创建方式(不包含数组和Class对象创建): new指令 反射调用 反序列化 对象创建过程 遇到ne ...

  10. 1.OpenGL mac开发环境搭建记录

    1.安装GLEW 和GLFW,转摘至:https://www.cnblogs.com/pretty-guy/p/11357793.html 2.开始测试,整个工程报错,关键信息如下: code sig ...