一、强大的“*”

“*”在通配符中是最常用的一种,代表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. SQL 如何在自增列插入指定数据

    SQL Server  中数据表往往会设置自增列,常见的比如说 首列的ID列. 往数据表插入新数据的时候,自增列是跳过的,无需插入即会按照设置的自增规则进行列增长.那么,如果我们想往自增列插入我们指定 ...

  2. 一种非常巧妙的读取串口数据的方法--C#

    读取不完就一直等待,读完了就立刻走,之前都是设置一个溢出时间,不管是不是早就读取完了都要在这等着,有一定的时间浪费. 注意,用之前要设置好SerialPort类的TimeOut属性:

  3. SpringBoot Web Https 配置

    不管是游戏服务器开发,还是其它服务开发,越来越多的平台都要求服务端必须支持https的访问.以增加安全性.比如目前火热的小程序,要求服务端必须支持https,苹果商店也有说http请求要修改为http ...

  4. java基本数据类型传递与引用传递区别

    文章转载自  zejian的博客http://blog.csdn.net/javazejian/article/details/51192130 java的值传递和引用传递在面试中一般都会都被涉及到, ...

  5. RPC基于http协议通过netty支持文件上传下载

    本人在中间件研发组(主要开发RPC),近期遇到一个需求:RPC基于http协议通过netty支持文件上传下载 经过一系列的资料查找学习,终于实现了该功能 通过netty实现文件上传下载,主要在编解码时 ...

  6. 谈谈网络分层和IP

    概述 在计算机网络这门课中,往往是将各层协议拆开一章一章的讲,每层协议是干嘛的,都各种怎么工作的.但如果有人问,这些协议之间怎么协调工作,有什么关系,往往处于懵逼状态. 网络分层 网络为什么分层,其实 ...

  7. H5单张、多张图片上传

    前言 今天我们聊一聊图片上传,单张Or多张 ,如今,各大图片上传插件数不胜数,例如:Jquery的 verupload.js,jQuery File Upload.Uploadify.jQuery.f ...

  8. Linux 文件/文件夹无法删除问题解决方案

    最近我们的服务器被黑客攻击,然后有些文件的属性被修改,导致我们无法删除病毒文件,同时采用 root 用户也无法删除,现在把解决方案记录下来. 普通删除 如果文件是当前用户的,那么使用 rm 命令就可以 ...

  9. Python的re模块

    什么是re模块,re模块有什么作用? re模块是Python提供的一个正则表达式相关的模块,主要是针对字符串进行模糊匹配,所以在字符串匹配这一功能上,re相当专业. 什么是模糊匹配? 之前的学习字符串 ...

  10. subprocess实时获取结果和捕获错误

    需要调用命令行来执行某些命令,主要是用 subprocess 实时获取结果和捕获错误,发现subprocess的很多坑. subprocess 普通获取结果方式,其需要命令完全执行才能返回结果: im ...