Проблема с использованием подстановочных знаков при выполнении команды CP в Терминале

Проблема с использованием подстановочных знаков при выполнении команды CP в Терминале

Я новичок и пытаюсь изучить Terminal Command. Сегодня я столкнулся с проблемой с cp wildcard command option. Я написал в Terminal эту команду

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

Как я могу использовать эти Wildcard и их классы?

решение1

cpне поддерживает никаких подстановочных знаков сам по себе. Расширение подстановочных знаков и шаблонов выполняется оболочкой, что является bashстандартным.

В любом случае, классы символов должны быть указаны внутри []- что исключает []уже окружающие их. Вот так:

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

Для сопоставления файла, состоящего изтолькобуквенно-цифровых символов с использованием подстановки оболочки требуетсярасширенный шар( extglob) синтаксис

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

Связанный контент