Linux通配符应用详解
一、强大的“*”
“*”在通配符中是最常用的一种,代表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通配符应用详解的更多相关文章
- linux awk命令详解
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
- Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)
启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...
- Linux启动过程详解
Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...
- Linux /dev目录详解和Linux系统各个目录的作用
Linux /dev目录详解(转http://blog.csdn.net/maopig/article/details/7195048) 在linux下,/dev目录是很重要的,各种设备都在下面.下面 ...
- linux cat 命令详解
linux cat 命令详解 http://linux.chinaunix.net/techdoc/system/2007/11/16/972467.shtml adb shell su //这个不一 ...
- 【初级】linux rm 命令详解及使用方法实战
rm:删除命令 前言: windows中的删除命令大家都不陌生,linux中的删除命令和windows中有一个共同特点,那就是危险,前两篇linux mkdir 命令详解及使用方法实战[初级]中我们就 ...
- Linux netstat命令详解
Linux netstat命令详解 一 简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多 ...
- Linux crontab 命令详解
在 Linux 中,任务可以被配置在指定的时间段.指定的日期.或系统平均载量低于指定的数量时自动运行.红帽企业 Linux 预配置了对重要系统任务的运行,以便使系统能够时时被更新.譬如,被 locat ...
- linux grep命令详解
linux grep命令详解 简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 ...
随机推荐
- BZOJ_3365_[Usaco2004 Feb]Distance Statistics 路程统计&&POJ_1741_Tree_点分治
BZOJ_3365_[Usaco2004 Feb]Distance Statistics 路程统计&&POJ_1741_Tree_点分治 Description 在得知了自己农 ...
- python中的异常
Python提供了两个非常重要的功能来处理异常和错误: 1) 异常处理try-.except 2) 断言assert 异常和断言,可以用于我们调试python程序,跟踪程序执行状态,尽快排查问题. 3 ...
- 【毕业原版】-《伦敦艺术大学毕业证书》UAL一模一样原件
☞伦敦艺术大学毕业证书[微/Q:865121257◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归& ...
- (2)STM32使用HAL库操作外部中断——理论讲解
1.中断触发过程 对主程序压栈--把中断服务函数的地址写入到程序计数器(PC)--执行中断服务函数 2.中断向量表 中断服务函数的地址在STM32的手册上的中断向量表中(如下是一部分): 如上表所示, ...
- Mybatis配置详解
一.SqlSession的使用范围说明 1.SQLSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory, ...
- 一次搞懂 Generator 函数
1.什么是 Generator 函数 在Javascript中,一个函数一旦开始执行,就会运行到最后或遇到return时结束,运行期间不会有其它代码能够打断它,也不能从外部再传入值到函数体内 而Gen ...
- 基于Raft深度优化,腾讯云金融级消息队列CMQ高可靠算法详解
背景介绍 分布式系统是指一组独立的计算机,通过网络协同工作的系统,客户端看来就如同单台机器在工作.随着互联网时代数据规模的爆发式增长,传统的单机系统在性能和可用性上已经无法胜任,分布式系统具有扩展性强 ...
- asp.net core系列 49 Identity 授权(上)
一.概述 授权是指用户能够访问资源的权限,如页面数据的查看.编辑.新增.删除.导出.下载等权限.ASP.NET Core 授权提供了多种且灵活的方式,包括:Razor pages授权约定.简单授权.R ...
- U盘制作微pe工具箱(实战)
分享人:广州华软 浩言 前言 相信大家平时生活中还是工作上使用电脑的时间还是比较多的,有时候电脑出现故障,比如系统文件损坏,没办法正常开机,或者是开机密码忘了,想要重装系统等,下面我推荐一个U盘启动项 ...
- 读懂 Gradle 的 DSL
现在 Android 开发免不了要和 Gradle 打交道,所有的 Android 开发肯定都知道这么在 build.gradle 中添加依赖,或者添加配置批量打包,但是真正理解这些脚本的人恐怕很少. ...