
Я новичок и пытаюсь изучить 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