Проблема с использованием подстановочных знаков, когда я делаю команду 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