在終端機中執行 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

cp本身不支援任何通配符。bash預設情況下,通配符和模式的擴展由 shell 完成。

在任何情況下,字元類別都應在[]- 中指定,排除[]它們周圍已經存在的字元類別。就像這樣:

cp Downloads/[[:alnum:]] test/

但是,[[:alnum:]]僅匹配單個字母數字字元。僅使用已列出的通配符無法匹配僅包含字母數字字元的所有檔案名稱。要獲得更強大的過濾,請查看find命令:

find . -regextype posix-extended -maxdepth 1 -regex '.*/[[:alnum:]]*'

在 內bash,您可以使用擴展的全局:

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 通配符的字母數字字元需要擴充全域extglob) 句法

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

相關內容