Como copiar um arquivo com um $ (sinal de dólar) no nome de uma pasta para outra no Linux?

4

Eu tenho um arquivo que eu quero copiar de um diretório para outro diretório.

Suponha que o arquivo some.txt copie da pasta1 para a pasta2

cp -r some.txt /folder2

Eu posso copiar este arquivo, mas se o nome do arquivo começar com $ como $somefile.class , então não consigo copiar o arquivo, apenas obtendo o arquivo não existe erro

cp -r $somefile.class /folder2
    
por user3581265 07.06.2014 / 10:22

4 respostas

15

Primeiro de tudo, você não precisa do -r flag que é (de man cp ):

-R, -r, --recursive
        copy directories recursively

Isso é útil somente ao copiar diretórios inteiros e seus conteúdos. Então, sempre que seus nomes de arquivo contiverem caracteres estranhos, você precisará escapa-los ou protegê-los com aspas simples, como as outras respostas já sugeriram:

cp '$somefile.class' /folder2
cp \$somefile.class /folder2

Como alternativa, você pode usar o recurso de expansão glob do shell para copiar o arquivo:

cp ?somefile.class /folder2
cp *somefile.class /folder2

O ? corresponde a "qualquer caractere único" e * corresponde a "0 ou mais caracteres". Portanto, usar esses globs permitirá que você copie o arquivo de destino sem se preocupar com o nome. No entanto, tenha em mente que você deve usar isso com cuidado e certificar-se de que os globs somente correspondam ao arquivo que você deseja copiar. Por exemplo, os que eu usei também corresponderiam a Lsomefile.class .

    
por 07.06.2014 / 15:37
9

Você precisa escapar de qualquer especial caractere com barra invertida \

cp -r \$somefile.class /folder2

Leia mais sobre escapando aqui:

De quais personagens eu preciso escapar ao usar sed em um script sh?

    
por 07.06.2014 / 10:50
8

O caractere $ é usado para significar uma variável shell. Se o arquivo realmente começar com $ , você deve usar aspas simples para evitar que o shell tente avaliá-lo como uma variável:

cp -r '$somefile.class' /folder2
    
por 07.06.2014 / 10:25
1

Nenhuma dessas soluções funcionou para mim no caso em que o caractere especial - estava na frente. A única coisa que funcionou para mim nesse caso foi colocar o diretório atual na frente assim:

cp -r './-somefile.class' /folder2

Embora não seja o sinal $ , é um caractere especial e pode ajudar outras pessoas por aí. As outras soluções não funcionaram, como colocar \ before ou colocar ênfase única ou dupla ao redor do nome do arquivo.

    
por 01.06.2018 / 18:47