在Linux命令中,方括号后面带有感叹号是什么?

问题描述 投票:0回答:2

我找到了以下linux命令。

 cp -f [!r][!e][!d][!m][!i][!n][!e]* /SomePath

我知道cp的作用,-f也没问题。但是我不知道方括号和感叹号是做什么的([!r][!e][!d][!m][!i][!n])。谁能帮我吗?

我在这里找到此命令:https://redmine.org/projects/redmine/wiki/HowTo_Migrate_Redmine_to_a_new_server_to_a_new_Redmine_version

linux ubuntu terminal command
2个回答
0
投票

来自Ubuntu's glob manpage

An  expression  "[!...]"  matches  a single character, namely any character
that is not matched by the expression obtained by removing the first '!' from it.

因此,在您提到的命令中,其效果是不会将任何以redmine开头的文件复制到/SomePath


0
投票

这在手册的pattern matching下有描述:

[…]匹配任何包含的字符。 [...]如果[之后的第一个字符是!^,则匹配所有未包含的字符。

因此,[!r]r以外的任何字符,[!e]e以外的任何字符,依此类推。 [!r][!e][!d][!m][!i][!n][!e]*扩展为所有不以字符串redmine开头的文件的名称(除非以.开头的文件,除非设置了dotglob shell选项)。

还有另一个外壳程序选项,可以使您写得更优雅一些:

shopt -s extglob
cp -f !(redmine)* /SomePath

其中!(pattern)匹配除[[pattern

之外的所有内容。
© www.soinside.com 2019 - 2024. All rights reserved.