一、强大的“*”

“*”在通配符中是最常用的一种,代表0个、一个或多个字符。在使用中有三种情况,表示三种不同的含义。

1.单独的“*”

这里指的是只有“*”出现的情况,默认为单独的一个,当然连续敲两个以上的“*”效果是一样的。具体点儿说就是“*”没有和其它字符联合起来(表示目录的“/”除外)。这种情况,通配的是该目录下的所有非隐藏内容,包括非隐藏的目录和非隐藏的文件。

看以下三条命令产生的效果:

温习一下ls命令,ls命令在没有跟目录或者文件的时候,默认的操作就是“ls .”,即对当前目录做list命令。

当操作ls *的时候,相当于ls当前目录下的所有内容,ls会自动的先列出文件,然后按照顺序显示每个目录下的内容。

即,ls *和ls dir1 file1 效果是一样的。

“*”单独出现时,最常用的不是在ls上,而是在cp、mv、rsync、rm一类的命令中。比如把dir1目录下的所有内容拷贝到dir2下,dir2下已经有内容存在。这个时候cp dir1 dir2是行不通的,删掉dir2后再执行这个命令会丢失dir2下的东西,如果dir1下内容比较多,就只能使用cp dir1/* dir2/ 这样的命令。

注意:“*”单独出现匹配目录下所有内容的用途十分广泛,用起来也很方便。但是这是个危险操作,操作时一定要“pwd”确认当前目录,或者使用绝对路径,再或者使用至少一级的可以确定目录路径的相对路径(比如rm –rf training/*就很安全,因为知道training是自己建立的;但是rm –rf conf/*就很危险,系统中有很多conf目录)。

rm –rf *;mv *;chmod *;chown *这些命令,如果执行路径不对,而且执行者是root,那么都可以造成系统崩溃。

“.*”的使用

单独的“*”表示该目录下所有内容,“.*”表示的是该目录下所有的隐藏文件和目录以及”.”,”..”。可以尝试执行 ls ~/.*

2.各种字符和“*”配合使用

出现“*”和字符在一起的情况,“*”就代表这匹配0个、一个和多个任意字符的意思,字符和“*”在一起代表0个、一个或者多个文件或目录。

比如,在一个日志目录中,目录类型有access和error两种,所有日志都以日期-时间命名,形如:

access.20120804-6.log   access.20120805-19.log  error.20120804-0.log   error.20120804-22.log  error.20120805-13.log

现在列出2012年8月4日的access日志

[root@localhost date_dir]# ls -al access.20120804*log

-rw-r--r-- 1 root root 0 Aug  9 23:16 access.20120804-0.log

-rw-r--r-- 1 root root 0 Aug  9 23:16 access.20120804-10.log

-rw-r--r-- 1 root root 0 Aug  9 23:16 access.20120804-11.log

……

也可以拷贝所有2012年的日志“cp *2012* /destination”;

或者把所有年份月份14日当天的日志列出。这个就稍微复杂,需要分析文件名称,由于小时的位置也会出现14,所以这里的通配不能简单地使用“*14*”,会列出来类似于access.20120815-14.log这样的日志。应该使用这样的匹配方法“*14-*”,以避免日期和小时上的混淆,这里使用了日期后面带有“-”的特点。

二、神奇的“[  ]”

“*”通配不是在所有的时候都好用的,比如需要8月4日10-16点的日志,如果用“*”来通配,总会少一些或者多一些文件,这个时候就用到“[  ]”。

1.匹配特定的多个字符

[acm]表示匹配“a”、“c”、“m”中的任意一个,也可以写做[a,c,m],比如,挑出以字母a,c,m开头的文件:

[root@localhost letter_dir]# ls

a.txt  c.txt  e.txt  g.txt  i.txt  k.txt  m.txt  o.txt  q.txt  s.txt  u.txt  w.txt  y.txt

b.txt  d.txt  f.txt  h.txt  j.txt  l.txt  n.txt  p.txt  r.txt  t.txt  v.txt  x.txt  z.txt

[root@localhost letter_dir]# ls [a,c,m].txt

a.txt  c.txt  m.txt

[root@localhost letter_dir]# ls [acm].txt

a.txt  c.txt  m.txt

2.匹配特定的多个数字

[035]表示匹配“0”、“3”、“5”中的任意一个,也可以写作[0,3,5],比如,挑出0时,3时,5时的日志:

[root@localhost date_dir]# ls *-[0,3,5].log

access.20120804-0.log            access.20120805-0.log        access.20120814-0.log

access.20120815-0.log            error.20120804-0.log         error.20120805-0.log

注意:这里[  ]中不能出现双位以上的数字,比如[0,15]。这种情况下shell会认为需要匹配[0,1,5]。

[root@localhost date_dir]# ls access*-[0,15].log

access.20120804-0.log  access.20120804-5.log  access.20120805-1.log  access.20120814-0.log

access.20120804-1.log  access.20120805-0.log  access.20120805-5.log  access.20120814-1.log

如果需要0点和15点的数据,只能分开执行或者使用特殊方法利用正则表达式。

3.匹配连续数字或字母的用法

连续的数字或者字母,用[2-9]和[a-z]这样的方式表示,其含义是匹配2到9中的任意一个数字和a到z中的任意一个字母。

注意:和上面提到的情况类似,这里“-”两边只能是一个字符,比如0、3、9、a等,不能是10、13这样的双位或者更多位数字。如果写成[10-23],shell会认为需要匹配“1,0-2,3”这四个数字。

像本节开头所描述那样,需要8月4日10-16点的日志:

[root@localhost date_dir]# ls *0804-1[0-6].log

access.20120804-10.log  access.20120804-12.log  access.20120804-14.log  access.20120804-16.log  error.20120804-11.log  error.20120804-13.log  error.20120804-15.log

access.20120804-11.log  access.20120804-13.log  access.20120804-15.log  error.20120804-10.log   error.20120804-12.log  error.20120804-14.log  error.20120804-16.log

三、通配符练习

应用场景1:删除2019年2到3月之前的所有日志文件

[root@localhost date_dir]# ls

2019-02-11  2019-02-13  2019-02-18  2019-02-20  2019-02-22  2019-02-24  2019-02-27  2019-03-11  2019-03-13  2019-03-15  2019-03-17  2019-03-25  2019-03-27  2019-03-29  2019-03-31  2019-02-12  2019-02-14  2019-02-19  2019-02-21  2019-02-23  2019-02-25  2019-02-28  2019-03-12  2019-03-14  2019-03-16  2019-03-18  2019-03-26  2019-03-28  2019-03-30  2019-04-09

ecbs@qhd-ecds:~/project/MecbsCaller/logs/mecbslog> rm -rf 2019-0[2,3]-*

ecbs@qhd-ecds:~/project/MecbsCaller/logs/mecbslog> ls

2019-04-09

应用场景2:删除2019年1月到3月之间日期以0-5结尾的.log日志

[root@localhost date_dir]# ls

catalina.2019-02-14.log  catalina.2019-02-15.log

catalina.2019-02-20.log  catalina.2019-02-21.log

catalina.2019-02-23.log  catalina.2019-02-25.log

catalina.2019-03-03.log  catalina.2019-03-04.log

catalina.2019-03-06.log  catalina.2019-03-07.log

catalina.2019-03-08.log  catalina.2019-03-14.log

[root@localhost date_dir]# rm catalina.*-0[1-3]-[0-3][0-5].log

catalina.2019-03-06.log  catalina.2019-03-07.log

catalina.2019-03-08.log

应用场景3:删除以manager开头且日期不以8结尾的日志。

[root@localhost date_dir]#ls -lrt manager.*

-rw-r--r-- 1 app app 0 Feb 13 17:51 manager.2019-02-13.log

-rw-r--r-- 1 app app 0 Feb 14 11:10 manager.2019-02-14.log

-rw-r--r-- 1 app app 0 Feb 25 16:04 manager.2019-02-25.log

-rw-r--r-- 1 app app 0 Mar  8 14:50 manager.2019-03-08.log

[root@localhost date_dir]# rm manager*[^8].log

[root@localhost date_dir]# ls -lrt manager.*

-rw-r--r-- 1 app app 0 Mar  8 14:50 manager.2019-03-08.log

应用场景4:复制指定目录全部内容到一个空目录

[root@localhost date_dir]# ls

bin  conf  lib  LICENSE  logs  logs2  NOTICE

[root@localhost date_dir]# cp logs logs2

cp: omitting directory `logs' #如果logs目录非空则不可以移动目录内容到其他目录

[root@localhost date_dir]# cp logs/* logs2/

[root@localhost date_dir]# cd logs2

[root@localhost date_dir]# ls -lrt

total 8596

-rw-r----- 1 ecbs ecbs  120392 Apr 10 10:54 localhost_access_log.2019-04-02.txt

-rw-r----- 1 ecbs ecbs   37600 Apr 10 10:54 localhost_access_log.2019-03-29.txt

Linux通配符应用详解的更多相关文章

  1. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  2. Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)

    启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...

  3. Linux启动过程详解

    Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...

  4. Linux /dev目录详解和Linux系统各个目录的作用

    Linux /dev目录详解(转http://blog.csdn.net/maopig/article/details/7195048) 在linux下,/dev目录是很重要的,各种设备都在下面.下面 ...

  5. linux cat 命令详解

    linux cat 命令详解 http://linux.chinaunix.net/techdoc/system/2007/11/16/972467.shtml adb shell su //这个不一 ...

  6. 【初级】linux rm 命令详解及使用方法实战

    rm:删除命令 前言: windows中的删除命令大家都不陌生,linux中的删除命令和windows中有一个共同特点,那就是危险,前两篇linux mkdir 命令详解及使用方法实战[初级]中我们就 ...

  7. Linux netstat命令详解

    Linux netstat命令详解 一  简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多 ...

  8. Linux crontab 命令详解

    在 Linux 中,任务可以被配置在指定的时间段.指定的日期.或系统平均载量低于指定的数量时自动运行.红帽企业 Linux 预配置了对重要系统任务的运行,以便使系统能够时时被更新.譬如,被 locat ...

  9. linux grep命令详解

    linux grep命令详解 简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 ...

随机推荐

  1. Hadoop3.0 WordCount测试一直Accept 状态,Nodes of the cluster 页面node列表个数为0

    起因是我运行wordcount测试一直卡主,不能执行,一直处于 Accept 状态,等待被执行,刚开始是各种配置yarn参数,以及host配置,后来发现还是不行 hadoop 集群安装完成后,在500 ...

  2. 利用face_recognition库裁取人脸

    from PIL import Image import face_recognition # Load the jpg file into a numpy array image = face_re ...

  3. 干货,分享一次完整的CentOS升级内核脚本。

    一.安装常用包 yum install wget vim screen net-tools lrzsz -y wget -O /etc/yum.repos.d/epel.repo http://mir ...

  4. HTML 基本语法速查

    HTML 基本文档 <!DOCTYPE html> <html> <head> <title>文档标题</title> </head& ...

  5. [AST实战]从零开始写一个wepy转VUE的工具

    为什么需要 wepy 转 VUE "转转二手"是我司用 wepy 开发的功能与 APP 相似度非常高的小程序,实现了大量的功能性页面,而新业务 H5 项目在开发过程中有时也经常需要 ...

  6. 深入学习Redis(3):主从复制

    前言 在前面的两篇文章中,分别介绍了Redis的内存模型和Redis的持久化. 在Redis的持久化中曾提到,Redis高可用的方案包括持久化.主从复制(及读写分离).哨兵和集群.其中持久化侧重解决的 ...

  7. ssm上传图片

    ssm上传图片 1      需求 添加客户时上传图片和客户修改信息是上传图片. 2      思路 首先,数据库创建pic字段,类型为varchar,通过逆向工程重新生成mapper接口和xml文件 ...

  8. 由dubbo服务禁用system.gc而引起的思考

    我一直都有一个疑问,丰巢业务服务的生产环境jvm参数设置是禁止system.gc的,也就是开启设置:-XX:+DisableExplicitGC,但是生产环境却从来没有出现过堆外内存溢出的情况.说明一 ...

  9. 《k8s-1.13版本源码分析》- Scheduler启动前逻辑

    本文原始地址(gitbook格式):https://farmer-hutao.github.io/k8s-source-code-analysis/core/scheduler/before-sche ...

  10. Spring学习(一):理解IoC容器

    序言 记得刚毕业那会儿,出来招工作被问到Spring的核心时,都觉得简单的一笔,直接说不就是IoC(控制反转)和DI(依赖注入)么,然后省略一万字对两个名词的解释.最近空来整理了一下Spring中Io ...