Yaitza

Linux上的文件名通配

1. glob:文件名通配;匹配模式:元字符;详细说明请参见Linux官方说明问题;命令:man glob。

1.1. *:匹配任意长度的任意字符

1.2. ?:匹配任意单个字符

1.3. []:匹配指定范围内的任意单个字符

有几种特殊格式:
- [a-z]
- [A-Z]
- [0-9]
- [a-z0-9]
- [[:upper::]]:所有大写字符
- [[:lower:]]:所有小写字符
- [[:alpha:]]:所有字母
- [[:digit:]]:所有数字
- [[:alnum:]]:所有字母和数字,This is equivalent to A-Za-z0-9.
- [[:space:]]:所有空白字符
- [[:blank:]]:所有空白或tab
- [[:punct::]]:所有标点符号
- [[:xdigit:]]:所有十六进制,This is equivalent to 0-9A-Fa-f.
- [[:print:]]:可打印字符,Matches characters in the range of ASCII 32 - 126. This is the same as [:graph:], above, but adding the space character.
- [:graph:] (graphic printable characters). Matches characters in the range of ASCII 33 - 126. This is the same as [:print:], below, but excluding the space character.

1.4. [^]或[!]:匹配指定范围外的任意单个字符

1.5. {…}:匹配大括号里面的所有模式,模式之间使用逗号分隔

1.6. {start…end}:匹配连续范围的字符

2. 练习:

2.1. 显示/var目录所有以1开头,以小写字母结尾,且中间出现一位任意字符的文件或目录

1
2
3
4
ubuntu@YAITZA:~$ ls -d /var/l?[a-z]
/var/lib /var/log
ubuntu@YAITZA:~$ ls -d /var/l?[[:lower:]]
/var/lib /var/log

2.2. 显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录

1
2
ls -d /etc/[0-9]*[^0-9]
ls -d /etc/[[:digit:]]*[^[:digit]]

2.3. 显示/etc目录下,以非字母开头,后面跟一个字母及其它任意长度任意字符的文件或目录

1
2
3
4
5
6
ls -d /etc/[^[:alpha:]][[:alpha:]]*
ubuntu@YAITZA:/tmp$ ls -d [^[:alpha:]][[:alpha:]]*
3aHHH
ls -d /etc/[^a-z][a-z]*
ubuntu@YAITZA:/tmp$ ls -d [^a-z][a-z]*
3aHHH AaJJ

2.4. 复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/test目录

1
2
cp -r /etc/m*[^0-9] /tmp/test
cp -r /etc/m*[^[:digit:]] /tmp/test

2.5. 复制/usr/share/man目录下,所有以man开头,后跟一个数字结尾的文件或目录至/tmp/man/目录下

1
2
cp -r /usr/share/man/man[0-9] /tmp/man
cp -r /usr/share/man/man[[:digit:]] /tmp/man

2.6. 复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d目录下

1
2
cp -r /etc/[mnrp]*.conf /tmp/conf.d
cp -r /etc/{m,n,r,p}*.conf /tmp/conf.d
🐶 您的支持将鼓励我继续创作 🐶