Problema ao usar curingas quando eu faço o comando CP no Terminal

1

Eu sou novo e tento aprender o Terminal Command. Hoje enfrentei algum problema com a opção de comando cp curinga. Eu escrevi no Terminal este comando

cp Downloads/[:alnum:]  test/

Aqui, Downloads é o diretório de onde eu quero copiar o arquivo de caracteres alfanuméricos no meu diretório test . Mas quando eu corri esse comando me mostrou:

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

Eu quero saber como posso usar o comando acima de classes curinga para cp . E também como posso usar o comando acima do caractere curinga.

Caracteres curinga são

 * 
? 
[characters]
[!characters]
[[:classes:]]

Classes comumente usadas são

[:alnum:]-> Match any Alphanumeric Character
[:alpha:] -> Match any Alphabetic Character
[:digit:] -> Match any nummeral 
[:lower:] -> Matches any lowercase letter
[:upper:] -> Matches any Uppercase letter

Como posso usar esse curinga e suas classes?

    
por Garten786 08.02.2016 / 19:45

2 respostas

3

cp não suporta nenhum caractere curinga. A expansão de curingas e padrões é feita pelo shell, que é bash por padrão.

Em qualquer caso, as classes de caracteres devem ser especificadas em [] - que exclui o [] que já está ao seu redor. Assim:

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

No entanto, [[:alnum:]] corresponderá apenas a um único caractere alfanumérico. Para corresponder a todos os nomes de arquivos contendo apenas caracteres alfanuméricos, não pode ser feito apenas com os curingas já listados. Para uma filtragem mais eficiente, consulte o comando find :

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

Dentro de bash , você pode usar globos estendidos :

shopt -s extglob
cp Downloads/*([[:alnum:]]) test/
    
por muru 08.02.2016 / 20:40
2

[:alnum:] na verdade corresponde a um único caractere do conjunto : , a , l , n , u , m , ou seja, fornecido

$ ls
_?_  123  7  a  abc  :file  fi:le  m

então

$ ls [:alnum:]
a  m

Para corresponder a um único caractere da classe alfanumérica [:alnum:] , ele precisa ser [[:alnum:]]

$ ls [[:alnum:]]
7  a  m

Para corresponder a um único caractere alfanumérico seguido por zero ou mais caracteres arbitrários

$ ls [[:alnum:]]*
123  7  a  abc  fi:le  m

Para corresponder ao arquivo que consiste em somente de caracteres alfanuméricos usando o shell globbing, é necessária a sintaxe extended glob ( extglob )

$ ls +([[:alnum:]])
123  7  a  abc  m
    
por steeldriver 08.02.2016 / 20:43