我是新手,正在尝试学习终端命令。今天我遇到了 cp 通配符命令选项的一些问题。我在终端中输入了这个命令
cp Downloads/[:alnum:] test/
这是Downloads
我要将字母数字字符文件复制到我的test
目录的目录。但是当我运行此命令时,显示:
cannot stat ‘Downloads/[:alnum:]’: No such file or directory
我想知道如何使用上述通配符类作为cp
命令。以及如何使用上述通配符命令。
通配符是
*
?
[characters]
[!characters]
[[:classes:]]
常用的类有
[:alnum:]-> Match any Alphanumeric Character
[:alpha:] -> Match any Alphabetic Character
[:digit:] -> Match any nummeral
[:lower:] -> Matches any lowercase letter
[:upper:] -> Matches any Uppercase letter
我如何使用这些通配符及其类别?
答案1
cp
bash
本身不支持任何通配符。默认情况下,通配符和模式的扩展由 shell 完成。
无论如何,字符类别必须在[]
- 内指定,这排除了[]
已经围绕它们的字符类别。如下所示:
cp Downloads/[[:alnum:]] test/
但是,[[:alnum:]]
只会匹配单个字母数字字符。仅使用已列出的通配符无法匹配所有仅包含字母数字字符的文件名。要获得更强大的过滤功能,请查看以下命令find
:
find . -regextype posix-extended -maxdepth 1 -regex '.*/[[:alnum:]]*'
在内部bash
,您可以使用扩展的 glob:
shopt -s extglob
cp Downloads/*([[:alnum:]]) test/
答案2
[:alnum:]
实际匹配单个字符从集合 :
,,,,,即给定a
l
n
u
m
$ ls
_?_ 123 7 a abc :file fi:le m
然后
$ ls [:alnum:]
a m
匹配字母数字中的单个字符班级 [:alnum:]
它需要[[:alnum:]]
$ ls [[:alnum:]]
7 a m
匹配单个字母数字字符,后跟零个或多个任意字符
$ ls [[:alnum:]]*
123 7 a abc fi:le m
匹配文件组成仅有的使用 shell 通配符的字母数字字符需要扩展的 glob(extglob
) 句法
$ ls +([[:alnum:]])
123 7 a abc m