在终端中执行 CP 命令时使用通配符的问题

在终端中执行 CP 命令时使用通配符的问题

我是新手,正在尝试学习终端命令。今天我遇到了 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

cpbash本身不支持任何通配符。默认情况下,通配符和模式的扩展由 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:]实际匹配单个字符从集合 :,,,,,即给定alnum

$ 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 通配符的字母数字字符需要扩展的 globextglob) 句法

$ ls +([[:alnum:]])
123  7  a  abc  m

相关内容