您的位置:首页 > 运维架构 > Linux

Linux通配符

2015-07-18 21:48 627 查看
Linux通配符

在我们平常的 Linux 使用中,在很多时候您可能需要一次对多个文件系统对象执行单一操作(如 cp)。在这些情况下,直接在命令行中输入许多文件名通常是很让人厌烦的:

[root@admin ~]# cp file1 file2 file3 file4 file5 …fileN /home/test/

为了解决这个问题, Linux 内置的通配符就起到很好的作用了。它允许您通过使用通配符模式一次指定多个文件。Bash 和其它 Linux 命令将通过在磁盘上查找并找到任何与之匹配的文件来解释这种模式。因此,如果在当前工作目录中,您有从 file1 到 fileN 的文件,那么您可以输入下面的命令来拷贝这些文件:

[root@admin ~]# cp file[1-N] /home/test/

或者,如果您想要删除文件名以 file 开头的所有文件,您可以输入:

[root@admin ~]# rm file*

常用的通配符有:

“* “:通配所有文件和目录,*代表0个或一个或多个字符

[123]:选择通配,匹配[]中的某个字符

[a-z]:选择通配,匹配a到z之间的某个字符,还能写成[A-Z]、[0-9]、[A-Za-z]等

? : 匹配任意一个字符

[!abc]:匹配任意不包含在[!]中的字符,这里[和!之间不能有空格

将t1目录下所有的隐藏文件拷贝到当前目录下(用 . 代表隐藏文件)

[root@admin home]# cp t1/.* ./


结果:

cp: omitting directory `t1/.'
cp: omitting directory `t1/..'


报错了,为什么呢?说明这样通配是错的,原因t1/.*中的 . 在这里代表的是当前目录而不是隐藏文件,如果这样写的话,就表示把当前目录拷贝到当前目录,这是个死循环。

应该像下面这样写

[root@admin home]# cp t1/.*txt ./


将t1目录下所有的文件拷贝到t2目录中

[root@admin home]# cp t1/* t2/


ls 是列出目录下所有的文件列表,但不包括二级目录中的内容,如果使用ls * 就会连二级目录中的内容一起列出来,但是不会管三级及其以上的目录中的内容了,仅到二级目录。如图所示:



假如有1 - 100的整数的目录文件

#要求列出 2 、3、4开头 5、6结尾的所有目录
[root@admin tt]# ls [2-4]*[5-6]
25  26  35  36  45  46

#列出2、3、4、5、6开头,5、6、7结尾的目录
[root@admin tt]# ls [2-4,5-6]*[5-7]
25  26  27  35  36  37  45  46  47  55  56  57  65  66  67

[root@admin tt]# ls [1-3,5-7]*[1-2,6-7]
11  16  21  26  31  36  51  56  61  66  71  76
12  17  22  27  32  37  52  57  62  67  72  77


使用 ? 通配一个字符,例如:

[root@admin tt]# ls 2?
20  21  22  23  24  25  26  27  28  29
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: