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

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

cp Downloads/[:alnum:]  test/

Вот, Downloads каталог, из которого я хочу скопировать файл буквенно-цифровых символов в мой test каталог. Но когда я запустил эту команду, мне показали:

cannot stat ‘Downloads/[:alnum:]’: No such file or directory

Я хочу знать, как я могу использовать выше классы подстановки для cp команда. И также, как я могу использовать вышеупомянутую команду Wildcard Character.

Подстановочные знаки

 * 
? 
[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 и их классы?

2 ответа

cp Сам по себе не поддерживает подстановочные знаки. Расширение шаблонов и шаблонов выполняется с помощью оболочки, которая bash по умолчанию.

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

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

Тем не мение, [[:alnum:]] будет соответствовать только один буквенно-цифровой символ. Совпадение всех имен файлов, содержащих только буквенно-цифровые символы, не может быть выполнено только с уже указанными подстановочными знаками. Для более мощной фильтрации посмотрите в find команда:

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

В bashВы можете использовать расширенные глобусы:

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

[: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
Другие вопросы по тегам