
Soy nuevo y trato de aprender Terminal Command. Hoy me enfrenté a un problema con la opción del comando cp comodín. Escribí en la Terminal este comando
cp Downloads/[:alnum:] test/
Aquí Downloads
está el directorio desde donde quiero copiar el archivo de caracteres alfanuméricos a mi test
directorio. Pero cuando ejecuté este comando me mostró:
cannot stat ‘Downloads/[:alnum:]’: No such file or directory
Quiero saber cómo puedo utilizar las clases comodín anteriores para cp
el comando. Y también cómo puedo usar el comando de carácter comodín anterior.
Los comodines son
*
?
[characters]
[!characters]
[[:classes:]]
Las clases más utilizadas son
[:alnum:]-> Match any Alphanumeric Character
[:alpha:] -> Match any Alphabetic Character
[:digit:] -> Match any nummeral
[:lower:] -> Matches any lowercase letter
[:upper:] -> Matches any Uppercase letter
¿Cómo puedo utilizar esos comodines y sus clases?
Respuesta1
cp
no admite comodines por sí solo. La expansión de comodines y patrones la realiza el shell, que es bash
el predeterminado.
En cualquier caso, las clases de caracteres deben especificarse dentro []
, lo que excluye las []
que ya las rodean. Al igual que:
cp Downloads/[[:alnum:]] test/
Sin embargo, [[:alnum:]]
sólo coincidirá con un único carácter alfanumérico. Para hacer coincidir todos los nombres de archivos que contienen solo caracteres alfanuméricos, no se puede hacer solo con los comodines que ya están enumerados. Para un filtrado más potente, consulte el find
comando:
find . -regextype posix-extended -maxdepth 1 -regex '.*/[[:alnum:]]*'
Dentro bash
, puedes usarglobos extendidos:
shopt -s extglob
cp Downloads/*([[:alnum:]]) test/
Respuesta2
[:alnum:]
en realidad coincide con un solo carácterdel conjunto :
, a
, l
, n
, u
, m
es decir, dado
$ ls
_?_ 123 7 a abc :file fi:le m
entonces
$ ls [:alnum:]
a m
Para hacer coincidir un solo carácter del alfanuméricoclase [:alnum:]
Necesita ser[[:alnum:]]
$ ls [[:alnum:]]
7 a m
Para hacer coincidir un solo carácter alfanumérico seguido de cero o más caracteres arbitrarios
$ ls [[:alnum:]]*
123 7 a abc fi:le m
Para hacer coincidir el archivo que consistesolode caracteres alfanuméricos usando shell globbing requiereglobo extendido( extglob
) sintaxis
$ ls +([[:alnum:]])
123 7 a abc m