ターミナルで 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は、それ自体ではワイルドカードをサポートしていません。ワイルドカードとパターンの展開は、デフォルトでシェルによって実行されます。

いずれの場合も、文字クラスは 内で指定する必要があります[]。つまり、[]すでに囲まれている文字クラスは除外されます。次のようになります。

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

ただし、[[:alnum:]]一致するのは 1 つの英数字のみです。英数字のみを含むすべてのファイル名に一致させるには、すでにリストされているワイルドカードだけでは不十分です。より強力なフィルタリングを行うには、次のfindコマンドを調べてください。

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

内ではbash拡張グロブ:

shopt -s extglob
cp Downloads/*([[:alnum:]]) test/

答え2

[:alnum:]実際には1文字に一致するセットから :、、、、、aすなわちl、与えられnum

$ ls
_?_  123  7  a  abc  :file  fi:le  m

それから

$ ls [:alnum:]
a  m

英数字の1文字に一致するクラス [:alnum:]それは必要だ[[:alnum:]]

$ ls [[:alnum:]]
7  a  m

1つの英数字とそれに続く0個以上の任意の文字に一致します

$ ls [[:alnum:]]*
123  7  a  abc  fi:le  m

ファイルを一致させるにはのみシェルグロビングを使用した英数字の文字の拡張グロブ( extglob) 構文

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

関連情報